aboutsummaryrefslogtreecommitdiffstats
path: root/fs/minix/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/minix/namei.c')
-rw-r--r--fs/minix/namei.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/fs/minix/namei.c b/fs/minix/namei.c
index f7fd367..f4814ee 100644
--- a/fs/minix/namei.c
+++ b/fs/minix/namei.c
@@ -185,7 +185,6 @@ static int minix_add_entry(struct inode * dir,
de->inode = 0;
dir->i_size = block*bh->b_size + offset;
dir->i_dirt = 1;
- dir->i_ctime = CURRENT_TIME;
}
if (de->inode) {
if (namecompare(namelen, info->s_namelen, name, de->name)) {
@@ -286,7 +285,6 @@ int minix_mknod(struct inode * dir, const char * name, int len, int mode, int rd
init_fifo(inode);
if (S_ISBLK(mode) || S_ISCHR(mode))
inode->i_rdev = rdev;
- inode->i_mtime = inode->i_atime = CURRENT_TIME;
inode->i_dirt = 1;
error = minix_add_entry(dir, name, len, &bh, &de);
if (error) {
@@ -334,7 +332,6 @@ int minix_mkdir(struct inode * dir, const char * name, int len, int mode)
}
inode->i_op = &minix_dir_inode_operations;
inode->i_size = 2 * info->s_dirsize;
- inode->i_mtime = inode->i_atime = CURRENT_TIME;
dir_block = minix_bread(inode,0,1);
if (!dir_block) {
iput(dir);
@@ -461,6 +458,10 @@ int minix_rmdir(struct inode * dir, const char * name, int len)
retval = -ENOTEMPTY;
goto end_rmdir;
}
+ if (de->inode != inode->i_ino) {
+ retval = -ENOENT;
+ goto end_rmdir;
+ }
if (inode->i_count > 1) {
retval = -EBUSY;
goto end_rmdir;
@@ -472,7 +473,7 @@ int minix_rmdir(struct inode * dir, const char * name, int len)
inode->i_nlink=0;
inode->i_dirt=1;
dir->i_nlink--;
- dir->i_ctime = dir->i_mtime = CURRENT_TIME;
+ inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
dir->i_dirt=1;
retval = 0;
end_rmdir:
@@ -511,8 +512,12 @@ repeat:
current->euid != inode->i_uid &&
current->euid != dir->i_uid)
goto end_unlink;
+ if (de->inode != inode->i_ino) {
+ retval = -ENOENT;
+ goto end_unlink;
+ }
if (!inode->i_nlink) {
- printk("Deleting nonexistent file (%04x:%d), %d\n",
+ printk("Deleting nonexistent file (%04x:%lu), %d\n",
inode->i_dev,inode->i_ino,inode->i_nlink);
inode->i_nlink=1;
}
@@ -521,7 +526,7 @@ repeat:
dir->i_ctime = dir->i_mtime = CURRENT_TIME;
dir->i_dirt = 1;
inode->i_nlink--;
- inode->i_ctime = CURRENT_TIME;
+ inode->i_ctime = dir->i_ctime;
inode->i_dirt = 1;
retval = 0;
end_unlink: