Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 23 Dec 2011 22:58:39 +0000 (14:58 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 23 Dec 2011 22:58:39 +0000 (14:58 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
  Btrfs: call d_instantiate after all ops are setup
  Btrfs: fix worker lock misuse in find_worker

1  2 
fs/btrfs/inode.c

diff --combined fs/btrfs/inode.c
@@@ -2358,7 -2358,7 +2358,7 @@@ static void btrfs_read_locked_inode(str
        inode_item = btrfs_item_ptr(leaf, path->slots[0],
                                    struct btrfs_inode_item);
        inode->i_mode = btrfs_inode_mode(leaf, inode_item);
 -      inode->i_nlink = btrfs_inode_nlink(leaf, inode_item);
 +      set_nlink(inode, btrfs_inode_nlink(leaf, inode_item));
        inode->i_uid = btrfs_inode_uid(leaf, inode_item);
        inode->i_gid = btrfs_inode_gid(leaf, inode_item);
        btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item));
@@@ -4590,10 -4590,6 +4590,6 @@@ static int btrfs_add_nondir(struct btrf
        int err = btrfs_add_link(trans, dir, inode,
                                 dentry->d_name.name, dentry->d_name.len,
                                 backref, index);
-       if (!err) {
-               d_instantiate(dentry, inode);
-               return 0;
-       }
        if (err > 0)
                err = -EEXIST;
        return err;
@@@ -4655,6 -4651,7 +4651,7 @@@ static int btrfs_mknod(struct inode *di
        else {
                init_special_inode(inode, inode->i_mode, rdev);
                btrfs_update_inode(trans, root, inode);
+               d_instantiate(dentry, inode);
        }
  out_unlock:
        nr = trans->blocks_used;
@@@ -4722,6 -4719,7 +4719,7 @@@ static int btrfs_create(struct inode *d
                inode->i_mapping->a_ops = &btrfs_aops;
                inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
                BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
+               d_instantiate(dentry, inode);
        }
  out_unlock:
        nr = trans->blocks_used;
@@@ -4779,6 -4777,7 +4777,7 @@@ static int btrfs_link(struct dentry *ol
                struct dentry *parent = dentry->d_parent;
                err = btrfs_update_inode(trans, root, inode);
                BUG_ON(err);
+               d_instantiate(dentry, inode);
                btrfs_log_new_name(trans, inode, NULL, parent);
        }
  
@@@ -6699,7 -6698,7 +6698,7 @@@ int btrfs_create_subvol_root(struct btr
        inode->i_op = &btrfs_dir_inode_operations;
        inode->i_fop = &btrfs_dir_file_operations;
  
 -      inode->i_nlink = 1;
 +      set_nlink(inode, 1);
        btrfs_i_size_write(inode, 0);
  
        err = btrfs_update_inode(trans, new_root, inode);
@@@ -7245,6 -7244,8 +7244,8 @@@ static int btrfs_symlink(struct inode *
                drop_inode = 1;
  
  out_unlock:
+       if (!err)
+               d_instantiate(dentry, inode);
        nr = trans->blocks_used;
        btrfs_end_transaction_throttle(trans, root);
        if (drop_inode) {