]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ufs: bforget() indirect blocks before freeing them
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 17 Jun 2015 23:26:18 +0000 (19:26 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 6 Jul 2015 21:39:24 +0000 (17:39 -0400)
right now it doesn't matter (lock_ufs() serializes everything),
but when we switch to per-inode locking, it will be needed.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/ufs/truncate.c

index 155e13aea80cc4f184f2bad19a3472df523e591a..9908a6045d7ae96149155243d01b26374be79396 100644 (file)
@@ -237,9 +237,9 @@ static int ufs_trunc_indirect(struct inode *inode, u64 offset, void *p)
                tmp = ufs_data_ptr_to_cpu(sb, p);
                ufs_data_ptr_clear(uspi, p);
 
+               ubh_bforget(ind_ubh);
                ufs_free_blocks (inode, tmp, uspi->s_fpb);
                mark_inode_dirty(inode);
-               ubh_bforget(ind_ubh);
                ind_ubh = NULL;
        }
        if (IS_SYNC(inode) && ind_ubh && ubh_buffer_dirty(ind_ubh))
@@ -299,9 +299,9 @@ static int ufs_trunc_dindirect(struct inode *inode, u64 offset, void *p)
                tmp = ufs_data_ptr_to_cpu(sb, p);
                ufs_data_ptr_clear(uspi, p);
 
+               ubh_bforget(dind_bh);
                ufs_free_blocks(inode, tmp, uspi->s_fpb);
                mark_inode_dirty(inode);
-               ubh_bforget(dind_bh);
                dind_bh = NULL;
        }
        if (IS_SYNC(inode) && dind_bh && ubh_buffer_dirty(dind_bh))
@@ -357,9 +357,9 @@ static int ufs_trunc_tindirect(struct inode *inode)
                tmp = ufs_data_ptr_to_cpu(sb, p);
                ufs_data_ptr_clear(uspi, p);
 
+               ubh_bforget(tind_bh);
                ufs_free_blocks(inode, tmp, uspi->s_fpb);
                mark_inode_dirty(inode);
-               ubh_bforget(tind_bh);
                tind_bh = NULL;
        }
        if (IS_SYNC(inode) && tind_bh && ubh_buffer_dirty(tind_bh))