diff options
author | Christoph Hellwig <hch@lst.de> | 2023-01-18 18:30:22 +0100 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2023-01-20 01:26:29 +0100 |
commit | b61d15d5ff67c07907c194d4354ec0c35bc657d1 (patch) | |
tree | 18b6d07729994a6c82b3729f55bbfaaa4fa5db78 /fs/minix | |
parent | minix: move releasing pages into unlink and rename (diff) | |
download | linux-b61d15d5ff67c07907c194d4354ec0c35bc657d1.tar.xz linux-b61d15d5ff67c07907c194d4354ec0c35bc657d1.zip |
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>
Diffstat (limited to 'fs/minix')
-rw-r--r-- | fs/minix/dir.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/minix/dir.c b/fs/minix/dir.c index ec462330e749..242e179aa1fb 100644 --- a/fs/minix/dir.c +++ b/fs/minix/dir.c @@ -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) |