diff options
Diffstat (limited to 'fs/minix/namei.c')
-rw-r--r-- | fs/minix/namei.c | 17 |
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: |