Loading fs/btrfs/inode.c +1 −0 Original line number Diff line number Diff line Loading @@ -3076,6 +3076,7 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle *trans, ret = btrfs_update_inode(trans, root, dir); BUG_ON(ret); btrfs_free_path(path); return 0; } Loading fs/btrfs/ioctl.c +2 −0 Original line number Diff line number Diff line Loading @@ -482,8 +482,10 @@ static int create_snapshot(struct btrfs_root *root, struct dentry *dentry, ret = btrfs_snap_reserve_metadata(trans, pending_snapshot); BUG_ON(ret); spin_lock(&root->fs_info->trans_lock); list_add(&pending_snapshot->list, &trans->transaction->pending_snapshots); spin_unlock(&root->fs_info->trans_lock); if (async_transid) { *async_transid = trans->transid; ret = btrfs_commit_transaction_async(trans, Loading fs/btrfs/transaction.c +11 −3 Original line number Diff line number Diff line Loading @@ -1298,11 +1298,19 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, schedule_timeout(1); finish_wait(&cur_trans->writer_wait, &wait); } while (atomic_read(&cur_trans->num_writers) > 1 || (should_grow && cur_trans->num_joined != joined)); /* * Ok now we need to make sure to block out any other joins while we * commit the transaction. We could have started a join before setting * no_join so make sure to wait for num_writers to == 1 again. */ spin_lock(&root->fs_info->trans_lock); root->fs_info->trans_no_join = 1; spin_unlock(&root->fs_info->trans_lock); } while (atomic_read(&cur_trans->num_writers) > 1 || (should_grow && cur_trans->num_joined != joined)); wait_event(cur_trans->writer_wait, atomic_read(&cur_trans->num_writers) == 1); /* * the reloc mutex makes sure that we stop Loading Loading
fs/btrfs/inode.c +1 −0 Original line number Diff line number Diff line Loading @@ -3076,6 +3076,7 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle *trans, ret = btrfs_update_inode(trans, root, dir); BUG_ON(ret); btrfs_free_path(path); return 0; } Loading
fs/btrfs/ioctl.c +2 −0 Original line number Diff line number Diff line Loading @@ -482,8 +482,10 @@ static int create_snapshot(struct btrfs_root *root, struct dentry *dentry, ret = btrfs_snap_reserve_metadata(trans, pending_snapshot); BUG_ON(ret); spin_lock(&root->fs_info->trans_lock); list_add(&pending_snapshot->list, &trans->transaction->pending_snapshots); spin_unlock(&root->fs_info->trans_lock); if (async_transid) { *async_transid = trans->transid; ret = btrfs_commit_transaction_async(trans, Loading
fs/btrfs/transaction.c +11 −3 Original line number Diff line number Diff line Loading @@ -1298,11 +1298,19 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, schedule_timeout(1); finish_wait(&cur_trans->writer_wait, &wait); } while (atomic_read(&cur_trans->num_writers) > 1 || (should_grow && cur_trans->num_joined != joined)); /* * Ok now we need to make sure to block out any other joins while we * commit the transaction. We could have started a join before setting * no_join so make sure to wait for num_writers to == 1 again. */ spin_lock(&root->fs_info->trans_lock); root->fs_info->trans_no_join = 1; spin_unlock(&root->fs_info->trans_lock); } while (atomic_read(&cur_trans->num_writers) > 1 || (should_grow && cur_trans->num_joined != joined)); wait_event(cur_trans->writer_wait, atomic_read(&cur_trans->num_writers) == 1); /* * the reloc mutex makes sure that we stop Loading