3.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Mikulas Patocka <miku...@twibright.com>

commit f49a26e7718dd30b49e3541e3e25aecf5e7294e2 upstream.

Update ctime and mtime when a directory is modified. (though OS/2 doesn't
update them anyway)

Signed-off-by: Mikulas Patocka <mpato...@redhat.com>
Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 fs/hpfs/namei.c |   25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

--- a/fs/hpfs/namei.c
+++ b/fs/hpfs/namei.c
@@ -8,6 +8,17 @@
 #include <linux/sched.h>
 #include "hpfs_fn.h"
 
+static void hpfs_update_directory_times(struct inode *dir)
+{
+       time_t t = get_seconds();
+       if (t == dir->i_mtime.tv_sec &&
+           t == dir->i_ctime.tv_sec)
+               return;
+       dir->i_mtime.tv_sec = dir->i_ctime.tv_sec = t;
+       dir->i_mtime.tv_nsec = dir->i_ctime.tv_nsec = 0;
+       hpfs_write_inode_nolock(dir);
+}
+
 static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 {
        const unsigned char *name = dentry->d_name.name;
@@ -99,6 +110,7 @@ static int hpfs_mkdir(struct inode *dir,
                result->i_mode = mode | S_IFDIR;
                hpfs_write_inode_nolock(result);
        }
+       hpfs_update_directory_times(dir);
        d_instantiate(dentry, result);
        hpfs_unlock(dir->i_sb);
        return 0;
@@ -187,6 +199,7 @@ static int hpfs_create(struct inode *dir
                result->i_mode = mode | S_IFREG;
                hpfs_write_inode_nolock(result);
        }
+       hpfs_update_directory_times(dir);
        d_instantiate(dentry, result);
        hpfs_unlock(dir->i_sb);
        return 0;
@@ -262,6 +275,7 @@ static int hpfs_mknod(struct inode *dir,
        insert_inode_hash(result);
 
        hpfs_write_inode_nolock(result);
+       hpfs_update_directory_times(dir);
        d_instantiate(dentry, result);
        brelse(bh);
        hpfs_unlock(dir->i_sb);
@@ -340,6 +354,7 @@ static int hpfs_symlink(struct inode *di
        insert_inode_hash(result);
 
        hpfs_write_inode_nolock(result);
+       hpfs_update_directory_times(dir);
        d_instantiate(dentry, result);
        hpfs_unlock(dir->i_sb);
        return 0;
@@ -423,6 +438,8 @@ again:
 out1:
        hpfs_brelse4(&qbh);
 out:
+       if (!err)
+               hpfs_update_directory_times(dir);
        hpfs_unlock(dir->i_sb);
        return err;
 }
@@ -477,6 +494,8 @@ static int hpfs_rmdir(struct inode *dir,
 out1:
        hpfs_brelse4(&qbh);
 out:
+       if (!err)
+               hpfs_update_directory_times(dir);
        hpfs_unlock(dir->i_sb);
        return err;
 }
@@ -595,7 +614,7 @@ static int hpfs_rename(struct inode *old
                goto end1;
        }
 
-       end:
+end:
        hpfs_i(i)->i_parent_dir = new_dir->i_ino;
        if (S_ISDIR(i->i_mode)) {
                inc_nlink(new_dir);
@@ -610,6 +629,10 @@ static int hpfs_rename(struct inode *old
                brelse(bh);
        }
 end1:
+       if (!err) {
+               hpfs_update_directory_times(old_dir);
+               hpfs_update_directory_times(new_dir);
+       }
        hpfs_unlock(i->i_sb);
        return err;
 }


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to