Skip to content

Commit

Permalink
btrfs: make btrfs_root::free_objectid hold the next available objectid
Browse files Browse the repository at this point in the history
Adjust the way free_objectid is being initialized, it now stores
BTRFS_FIRST_FREE_OBJECTID rather than the, somewhat arbitrary,
BTRFS_FIRST_FREE_OBJECTID - 1. This change also has the added benefit
that now it becomes unnecessary to explicitly initialize free_objectid
for a newly create fs root.

Reviewed-by: Josef Bacik <[email protected]>
Signed-off-by: Nikolay Borisov <[email protected]>
Reviewed-by: David Sterba <[email protected]>
Signed-off-by: David Sterba <[email protected]>
  • Loading branch information
lorddoskias authored and kdave committed Feb 8, 2021
1 parent 6b8fad5 commit 2312510
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
8 changes: 4 additions & 4 deletions fs/btrfs/disk-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -4767,10 +4767,10 @@ int btrfs_init_root_free_objectid(struct btrfs_root *root)
slot = path->slots[0] - 1;
l = path->nodes[0];
btrfs_item_key_to_cpu(l, &found_key, slot);
root->free_objectid = max_t(u64, found_key.objectid,
BTRFS_FIRST_FREE_OBJECTID - 1);
root->free_objectid = max_t(u64, found_key.objectid + 1,
BTRFS_FIRST_FREE_OBJECTID);
} else {
root->free_objectid = BTRFS_FIRST_FREE_OBJECTID - 1;
root->free_objectid = BTRFS_FIRST_FREE_OBJECTID;
}
ret = 0;
error:
Expand All @@ -4791,7 +4791,7 @@ int btrfs_get_free_objectid(struct btrfs_root *root, u64 *objectid)
goto out;
}

*objectid = ++root->free_objectid;
*objectid = root->free_objectid++;
ret = 0;
out:
mutex_unlock(&root->objectid_mutex);
Expand Down
8 changes: 6 additions & 2 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -8598,9 +8598,13 @@ int btrfs_create_subvol_root(struct btrfs_trans_handle *trans,
struct inode *inode;
int err;
u64 index = 0;
u64 ino;

err = btrfs_get_free_objectid(new_root, &ino);
if (err < 0)
return err;

inode = btrfs_new_inode(trans, new_root, NULL, "..", 2,
new_dirid, new_dirid,
inode = btrfs_new_inode(trans, new_root, NULL, "..", 2, ino, ino,
S_IFDIR | (~current_umask() & S_IRWXUGO),
&index);
if (IS_ERR(inode))
Expand Down
4 changes: 0 additions & 4 deletions fs/btrfs/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -724,10 +724,6 @@ static noinline int create_subvol(struct inode *dir,
goto fail;
}

mutex_lock(&new_root->objectid_mutex);
new_root->free_objectid = new_dirid;
mutex_unlock(&new_root->objectid_mutex);

/*
* insert the directory item
*/
Expand Down

0 comments on commit 2312510

Please sign in to comment.