minix: fix error handling in minix_delete_entry
If minix_prepare_chunk fails, updating c/mtime and marking the dir inode dirty is wrong, as the inode hasn't been modified. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
35bb6a092c
commit
b61d15d5ff
@ -297,18 +297,20 @@ int minix_delete_entry(struct minix_dir_entry *de, struct page *page)
|
||||
|
||||
lock_page(page);
|
||||
err = minix_prepare_chunk(page, pos, len);
|
||||
if (err == 0) {
|
||||
if (sbi->s_version == MINIX_V3)
|
||||
((minix3_dirent *) de)->inode = 0;
|
||||
else
|
||||
de->inode = 0;
|
||||
err = dir_commit_chunk(page, pos, len);
|
||||
} else {
|
||||
if (err) {
|
||||
unlock_page(page);
|
||||
return err;
|
||||
}
|
||||
if (sbi->s_version == MINIX_V3)
|
||||
((minix3_dirent *)de)->inode = 0;
|
||||
else
|
||||
de->inode = 0;
|
||||
err = dir_commit_chunk(page, pos, len);
|
||||
if (err)
|
||||
return err;
|
||||
inode->i_ctime = inode->i_mtime = current_time(inode);
|
||||
mark_inode_dirty(inode);
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int minix_make_empty(struct inode *inode, struct inode *dir)
|
||||
|
Loading…
Reference in New Issue
Block a user