ufs: kill more lock_ufs() calls

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>
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c
index f913a69..0e4d88e 100644
--- a/fs/ufs/inode.c
+++ b/fs/ufs/inode.c
@@ -867,11 +867,7 @@
 
 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 @@
 	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);
-	}
 }
diff --git a/fs/ufs/truncate.c b/fs/ufs/truncate.c
index 2115470..90cf3a7 100644
--- a/fs/ufs/truncate.c
+++ b/fs/ufs/truncate.c
@@ -457,6 +457,7 @@
 	if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
 		return -EPERM;
 
+	lock_ufs(sb);
 	err = ufs_alloc_lastblock(inode);
 
 	if (err) {
@@ -486,6 +487,7 @@
 	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 @@
 		/* 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;
 	}