{
        struct bch_inode_info *inode = to_bch_ei(dentry->d_inode);
        struct bch_fs *c = inode->v.i_sb->s_fs_info;
-       struct btree_trans *trans = bch2_trans_get(c);
        struct btree_iter inode_iter = { NULL };
        struct bch_inode_unpacked inode_u;
        struct posix_acl *acl;
        int ret;
 
        mutex_lock(&inode->ei_update_lock);
+       struct btree_trans *trans = bch2_trans_get(c);
 retry:
        bch2_trans_begin(trans);
        acl = _acl;
 
        set_cached_acl(&inode->v, type, acl);
 err:
-       mutex_unlock(&inode->ei_update_lock);
        bch2_trans_put(trans);
+       mutex_unlock(&inode->ei_update_lock);
 
        return ret;
 }
 
                       struct bch_inode_info *dir,
                       struct dentry *dentry)
 {
-       struct btree_trans *trans = bch2_trans_get(c);
        struct bch_inode_unpacked dir_u, inode_u;
        int ret;
 
        mutex_lock(&inode->ei_update_lock);
+       struct btree_trans *trans = bch2_trans_get(c);
 
        ret = commit_do(trans, NULL, NULL, 0,
                        bch2_link_trans(trans,
        struct bch_inode_info *dir = to_bch_ei(vdir);
        struct bch_inode_info *inode = to_bch_ei(dentry->d_inode);
        struct bch_inode_unpacked dir_u, inode_u;
-       struct btree_trans *trans = bch2_trans_get(c);
        int ret;
 
        bch2_lock_inodes(INODE_UPDATE_LOCK, dir, inode);
 
+       struct btree_trans *trans = bch2_trans_get(c);
+
        ret = commit_do(trans, NULL, NULL,
                        BCH_TRANS_COMMIT_no_enospc,
                bch2_unlink_trans(trans,
                set_nlink(&inode->v, 0);
        }
 err:
-       bch2_unlock_inodes(INODE_UPDATE_LOCK, dir, inode);
        bch2_trans_put(trans);
+       bch2_unlock_inodes(INODE_UPDATE_LOCK, dir, inode);
 
        return ret;
 }
                        return ret;
        }
 
-       trans = bch2_trans_get(c);
-
        bch2_lock_inodes(INODE_UPDATE_LOCK,
                         src_dir,
                         dst_dir,
                         src_inode,
                         dst_inode);
 
+       trans = bch2_trans_get(c);
+
        ret   = bch2_subvol_is_ro_trans(trans, src_dir->ei_subvol) ?:
                bch2_subvol_is_ro_trans(trans, dst_dir->ei_subvol);
        if (ret)