summaryrefslogtreecommitdiffstats
path: root/fs/udf/namei.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2015-03-24 16:47:25 -0400
committerJan Kara <jack@suse.cz>2015-04-01 08:26:14 -0400
commit3adc12e9648291149a1e3f354d0ad158fc2571e7 (patch)
treefb31963ff3055f7093f6eb91528ca4f03705fd44 /fs/udf/namei.c
parent0fd2ba36b8e4c720e5fb5ee40171919c8207237e (diff)
udf: Update ctime and mtime when directory is modified
We failed to update ctime & mtime of a directory when new entry was created in it during rename, link, create, etc. Fix that. Reported-by: Taesoo Kim <tsgatesv@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf/namei.c')
-rw-r--r--fs/udf/namei.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c
index fbf3d90967ea..39661977c89c 100644
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -568,8 +568,8 @@ static int udf_add_nondir(struct dentry *dentry, struct inode *inode)
568 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse = 568 *(__le32 *)((struct allocDescImpUse *)cfi.icb.impUse)->impUse =
569 cpu_to_le32(iinfo->i_unique & 0x00000000FFFFFFFFUL); 569 cpu_to_le32(iinfo->i_unique & 0x00000000FFFFFFFFUL);
570 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL); 570 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
571 if (UDF_I(dir)->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) 571 dir->i_ctime = dir->i_mtime = current_fs_time(dir->i_sb);
572 mark_inode_dirty(dir); 572 mark_inode_dirty(dir);
573 if (fibh.sbh != fibh.ebh) 573 if (fibh.sbh != fibh.ebh)
574 brelse(fibh.ebh); 574 brelse(fibh.ebh);
575 brelse(fibh.sbh); 575 brelse(fibh.sbh);
@@ -682,6 +682,7 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
682 cfi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY; 682 cfi.fileCharacteristics |= FID_FILE_CHAR_DIRECTORY;
683 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL); 683 udf_write_fi(dir, &cfi, fi, &fibh, NULL, NULL);
684 inc_nlink(dir); 684 inc_nlink(dir);
685 dir->i_ctime = dir->i_mtime = current_fs_time(dir->i_sb);
685 mark_inode_dirty(dir); 686 mark_inode_dirty(dir);
686 unlock_new_inode(inode); 687 unlock_new_inode(inode);
687 d_instantiate(dentry, inode); 688 d_instantiate(dentry, inode);
@@ -1023,6 +1024,8 @@ static int udf_link(struct dentry *old_dentry, struct inode *dir,
1023 inc_nlink(inode); 1024 inc_nlink(inode);
1024 inode->i_ctime = current_fs_time(inode->i_sb); 1025 inode->i_ctime = current_fs_time(inode->i_sb);
1025 mark_inode_dirty(inode); 1026 mark_inode_dirty(inode);
1027 dir->i_ctime = dir->i_mtime = current_fs_time(dir->i_sb);
1028 mark_inode_dirty(dir);
1026 ihold(inode); 1029 ihold(inode);
1027 d_instantiate(dentry, inode); 1030 d_instantiate(dentry, inode);
1028 1031
@@ -1126,7 +1129,9 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
1126 inode_dec_link_count(new_inode); 1129 inode_dec_link_count(new_inode);
1127 } 1130 }
1128 old_dir->i_ctime = old_dir->i_mtime = current_fs_time(old_dir->i_sb); 1131 old_dir->i_ctime = old_dir->i_mtime = current_fs_time(old_dir->i_sb);
1132 new_dir->i_ctime = new_dir->i_mtime = current_fs_time(new_dir->i_sb);
1129 mark_inode_dirty(old_dir); 1133 mark_inode_dirty(old_dir);
1134 mark_inode_dirty(new_dir);
1130 1135
1131 if (dir_fi) { 1136 if (dir_fi) {
1132 dir_fi->icb.extLocation = cpu_to_lelb(UDF_I(new_dir)->i_location); 1137 dir_fi->icb.extLocation = cpu_to_lelb(UDF_I(new_dir)->i_location);