minix: fix error handling in minix_delete_entry
authorChristoph Hellwig <hch@lst.de>
Wed, 18 Jan 2023 17:30:22 +0000 (18:30 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 20 Jan 2023 00:26:29 +0000 (19:26 -0500)
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>
fs/minix/dir.c

index ec462330e749afc2b168d034379f09f738fbace3..242e179aa1fbebc0b815c69345bdc57855c65d11 100644 (file)
@@ -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)