ufs: kill more lock_ufs() calls
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 16 Jun 2015 06:35:14 +0000 (02:35 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 6 Jul 2015 21:39:19 +0000 (17:39 -0400)
a) move it inside ufs_truncate()
b) ufs_free_inode() doesn't need it - it's serialized on ->s_lock
c) ufs_write_inode() doesn't need it either (and can be called without
it anyway).

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

index f913a6924b23814852e03f2fce8acb911dfc6635..0e4d88e0e709cf8a07b2c4f2c34cbbe2617ee392 100644 (file)
@@ -867,11 +867,7 @@ static int ufs_update_inode(struct inode * inode, int do_sync)
 
 int ufs_write_inode(struct inode *inode, struct writeback_control *wbc)
 {
-       int ret;
-       lock_ufs(inode->i_sb);
-       ret = ufs_update_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
-       unlock_ufs(inode->i_sb);
-       return ret;
+       return ufs_update_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
 }
 
 int ufs_sync_inode (struct inode *inode)
@@ -890,22 +886,17 @@ void ufs_evict_inode(struct inode * inode)
        if (want_delete) {
                loff_t old_i_size;
                /*UFS_I(inode)->i_dtime = CURRENT_TIME;*/
-               lock_ufs(inode->i_sb);
                mark_inode_dirty(inode);
                ufs_update_inode(inode, IS_SYNC(inode));
                old_i_size = inode->i_size;
                inode->i_size = 0;
                if (inode->i_blocks && ufs_truncate(inode, old_i_size))
                        ufs_warning(inode->i_sb, __func__, "ufs_truncate failed\n");
-               unlock_ufs(inode->i_sb);
        }
 
        invalidate_inode_buffers(inode);
        clear_inode(inode);
 
-       if (want_delete) {
-               lock_ufs(inode->i_sb);
+       if (want_delete)
                ufs_free_inode(inode);
-               unlock_ufs(inode->i_sb);
-       }
 }
index 21154704c16801ea6525f4152637dc3d16b4bdd8..90cf3a76c500a2d8d9c2fe27ebf6508373e9e3c1 100644 (file)
@@ -457,6 +457,7 @@ int ufs_truncate(struct inode *inode, loff_t old_i_size)
        if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
                return -EPERM;
 
+       lock_ufs(sb);
        err = ufs_alloc_lastblock(inode);
 
        if (err) {
@@ -486,6 +487,7 @@ int ufs_truncate(struct inode *inode, loff_t old_i_size)
        ufsi->i_lastfrag = DIRECT_FRAGMENT;
        mark_inode_dirty(inode);
 out:
+       unlock_ufs(sb);
        UFSD("EXIT: err %d\n", err);
        return err;
 }
@@ -506,9 +508,7 @@ int ufs_setattr(struct dentry *dentry, struct iattr *attr)
                /* XXX(truncate): truncate_setsize should be called last */
                truncate_setsize(inode, attr->ia_size);
 
-               lock_ufs(inode->i_sb);
                error = ufs_truncate(inode, old_i_size);
-               unlock_ufs(inode->i_sb);
                if (error)
                        return error;
        }