mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-11-07 04:09:21 +00:00
hpfs: update ctime and mtime on directory modification
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 <mpatocka@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6ae99d59c8
commit
315966f69a
1 changed files with 24 additions and 1 deletions
|
@ -8,6 +8,17 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include "hpfs_fn.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)
|
static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||||
{
|
{
|
||||||
const unsigned char *name = dentry->d_name.name;
|
const unsigned char *name = dentry->d_name.name;
|
||||||
|
@ -99,6 +110,7 @@ static int hpfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||||
result->i_mode = mode | S_IFDIR;
|
result->i_mode = mode | S_IFDIR;
|
||||||
hpfs_write_inode_nolock(result);
|
hpfs_write_inode_nolock(result);
|
||||||
}
|
}
|
||||||
|
hpfs_update_directory_times(dir);
|
||||||
d_instantiate(dentry, result);
|
d_instantiate(dentry, result);
|
||||||
hpfs_unlock(dir->i_sb);
|
hpfs_unlock(dir->i_sb);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -187,6 +199,7 @@ static int hpfs_create(struct inode *dir, struct dentry *dentry, umode_t mode, b
|
||||||
result->i_mode = mode | S_IFREG;
|
result->i_mode = mode | S_IFREG;
|
||||||
hpfs_write_inode_nolock(result);
|
hpfs_write_inode_nolock(result);
|
||||||
}
|
}
|
||||||
|
hpfs_update_directory_times(dir);
|
||||||
d_instantiate(dentry, result);
|
d_instantiate(dentry, result);
|
||||||
hpfs_unlock(dir->i_sb);
|
hpfs_unlock(dir->i_sb);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -262,6 +275,7 @@ static int hpfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, de
|
||||||
insert_inode_hash(result);
|
insert_inode_hash(result);
|
||||||
|
|
||||||
hpfs_write_inode_nolock(result);
|
hpfs_write_inode_nolock(result);
|
||||||
|
hpfs_update_directory_times(dir);
|
||||||
d_instantiate(dentry, result);
|
d_instantiate(dentry, result);
|
||||||
brelse(bh);
|
brelse(bh);
|
||||||
hpfs_unlock(dir->i_sb);
|
hpfs_unlock(dir->i_sb);
|
||||||
|
@ -340,6 +354,7 @@ static int hpfs_symlink(struct inode *dir, struct dentry *dentry, const char *sy
|
||||||
insert_inode_hash(result);
|
insert_inode_hash(result);
|
||||||
|
|
||||||
hpfs_write_inode_nolock(result);
|
hpfs_write_inode_nolock(result);
|
||||||
|
hpfs_update_directory_times(dir);
|
||||||
d_instantiate(dentry, result);
|
d_instantiate(dentry, result);
|
||||||
hpfs_unlock(dir->i_sb);
|
hpfs_unlock(dir->i_sb);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -423,6 +438,8 @@ again:
|
||||||
out1:
|
out1:
|
||||||
hpfs_brelse4(&qbh);
|
hpfs_brelse4(&qbh);
|
||||||
out:
|
out:
|
||||||
|
if (!err)
|
||||||
|
hpfs_update_directory_times(dir);
|
||||||
hpfs_unlock(dir->i_sb);
|
hpfs_unlock(dir->i_sb);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -477,6 +494,8 @@ static int hpfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
out1:
|
out1:
|
||||||
hpfs_brelse4(&qbh);
|
hpfs_brelse4(&qbh);
|
||||||
out:
|
out:
|
||||||
|
if (!err)
|
||||||
|
hpfs_update_directory_times(dir);
|
||||||
hpfs_unlock(dir->i_sb);
|
hpfs_unlock(dir->i_sb);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -595,7 +614,7 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
goto end1;
|
goto end1;
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
hpfs_i(i)->i_parent_dir = new_dir->i_ino;
|
hpfs_i(i)->i_parent_dir = new_dir->i_ino;
|
||||||
if (S_ISDIR(i->i_mode)) {
|
if (S_ISDIR(i->i_mode)) {
|
||||||
inc_nlink(new_dir);
|
inc_nlink(new_dir);
|
||||||
|
@ -610,6 +629,10 @@ static int hpfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
brelse(bh);
|
brelse(bh);
|
||||||
}
|
}
|
||||||
end1:
|
end1:
|
||||||
|
if (!err) {
|
||||||
|
hpfs_update_directory_times(old_dir);
|
||||||
|
hpfs_update_directory_times(new_dir);
|
||||||
|
}
|
||||||
hpfs_unlock(i->i_sb);
|
hpfs_unlock(i->i_sb);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue