]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ufs: ufs_trunc_...() has exclusion with everything that might cause allocations
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 16 Jun 2015 22:45:21 +0000 (18:45 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 6 Jul 2015 21:39:28 +0000 (17:39 -0400)
Currently - on lock_ufs(), eventually - on per-inode mutex.
lock_ufs() used to be mere BKL, which is much weaker, so it needed
those rechecks.  BKL doesn't provide any exclusion once we lose CPU;
its blind replacement, OTOH, _does_.  Making that per-filesystem was
an atrocity, but at least we can simplify life here.  And yes, we
certainly need to make that sucker per-inode - these days inode.c and
truncate.c uses are needed only to protect the block pointers.

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

index c56f4ef1cb7a14437aef9bf8faeaf3c3d8a5e4e3..3beaa848e30a85c00c18bd79836edab22a18bb60 100644 (file)
@@ -195,10 +195,6 @@ static int ufs_trunc_indirect(struct inode *inode, u64 offset, void *p)
        if (!tmp)
                return 0;
        ind_ubh = ubh_bread(sb, tmp, uspi->s_bsize);
-       if (tmp != ufs_data_ptr_to_cpu(sb, p)) {
-               ubh_brelse (ind_ubh);
-               return 1;
-       }
        if (!ind_ubh) {
                write_seqlock(&UFS_I(inode)->meta_lock);
                ufs_data_ptr_clear(uspi, p);
@@ -280,10 +276,6 @@ static int ufs_trunc_dindirect(struct inode *inode, u64 offset, void *p)
        if (!tmp)
                return 0;
        dind_bh = ubh_bread(sb, tmp, uspi->s_bsize);
-       if (tmp != ufs_data_ptr_to_cpu(sb, p)) {
-               ubh_brelse (dind_bh);
-               return 1;
-       }
        if (!dind_bh) {
                write_seqlock(&UFS_I(inode)->meta_lock);
                ufs_data_ptr_clear(uspi, p);
@@ -345,10 +337,6 @@ static int ufs_trunc_tindirect(struct inode *inode)
        if (!(tmp = ufs_data_ptr_to_cpu(sb, p)))
                return 0;
        tind_bh = ubh_bread (sb, tmp, uspi->s_bsize);
-       if (tmp != ufs_data_ptr_to_cpu(sb, p)) {
-               ubh_brelse (tind_bh);
-               return 1;
-       }
        if (!tind_bh) {
                write_seqlock(&ufsi->meta_lock);
                ufs_data_ptr_clear(uspi, p);