fs/ntfs3: Allow repeated call to ntfs3_put_sbi
authorKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Fri, 22 Sep 2023 10:07:59 +0000 (13:07 +0300)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Thu, 28 Sep 2023 12:03:59 +0000 (15:03 +0300)
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/bitmap.c
fs/ntfs3/super.c

index d66055e30aff946d91d9959f519db8249383b731..63f14a0232f6a0e0672c5373748bf77b72931bf2 100644 (file)
@@ -125,6 +125,7 @@ void wnd_close(struct wnd_bitmap *wnd)
        struct rb_node *node, *next;
 
        kfree(wnd->free_bits);
+       wnd->free_bits = NULL;
        run_close(&wnd->run);
 
        node = rb_first(&wnd->start_tree);
index f78c67452b2a8c945ae531ab1186686dcb234892..71c80c578feb6e06322305948a840feb5441317a 100644 (file)
@@ -576,20 +576,30 @@ static noinline void ntfs3_put_sbi(struct ntfs_sb_info *sbi)
        wnd_close(&sbi->mft.bitmap);
        wnd_close(&sbi->used.bitmap);
 
-       if (sbi->mft.ni)
+       if (sbi->mft.ni) {
                iput(&sbi->mft.ni->vfs_inode);
+               sbi->mft.ni = NULL;
+       }
 
-       if (sbi->security.ni)
+       if (sbi->security.ni) {
                iput(&sbi->security.ni->vfs_inode);
+               sbi->security.ni = NULL;
+       }
 
-       if (sbi->reparse.ni)
+       if (sbi->reparse.ni) {
                iput(&sbi->reparse.ni->vfs_inode);
+               sbi->reparse.ni = NULL;
+       }
 
-       if (sbi->objid.ni)
+       if (sbi->objid.ni) {
                iput(&sbi->objid.ni->vfs_inode);
+               sbi->objid.ni = NULL;
+       }
 
-       if (sbi->volume.ni)
+       if (sbi->volume.ni) {
                iput(&sbi->volume.ni->vfs_inode);
+               sbi->volume.ni = NULL;
+       }
 
        ntfs_update_mftmirr(sbi, 0);
 
@@ -1577,6 +1587,7 @@ put_inode_out:
        iput(inode);
 out:
        kfree(boot2);
+       ntfs3_put_sbi(sbi);
        return err;
 }