mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
bcachefs: Don't unlock trans before data_update_init()
data_update_init() does need to do btree operations, delay doing the unlock-before-io. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
642c1aabb0
commit
f02d153274
|
|
@ -980,6 +980,8 @@ int bch2_data_update_init(struct btree_trans *trans,
|
|||
goto out_nocow_unlock;
|
||||
}
|
||||
|
||||
bch2_trans_unlock(trans);
|
||||
|
||||
ret = __bch2_data_update_bios_init(m, c, io_opts, buf_bytes);
|
||||
if (ret)
|
||||
goto out_nocow_unlock;
|
||||
|
|
|
|||
|
|
@ -359,16 +359,14 @@ int bch2_move_extent(struct moving_context *ctxt,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Before memory allocations & taking nocow locks in
|
||||
* bch2_data_update_init():
|
||||
*/
|
||||
bch2_trans_unlock(trans);
|
||||
|
||||
struct moving_io *io = kzalloc(sizeof(struct moving_io), GFP_KERNEL);
|
||||
struct moving_io *io = allocate_dropping_locks(trans, ret,
|
||||
kzalloc(sizeof(struct moving_io), _gfp));
|
||||
if (!io)
|
||||
goto err;
|
||||
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
||||
INIT_LIST_HEAD(&io->io_list);
|
||||
io->write.ctxt = ctxt;
|
||||
io->read_sectors = k.k->size;
|
||||
|
|
@ -388,6 +386,8 @@ int bch2_move_extent(struct moving_context *ctxt,
|
|||
io->write.op.c = c;
|
||||
io->write.data_opts = data_opts;
|
||||
|
||||
bch2_trans_unlock(trans);
|
||||
|
||||
ret = bch2_data_update_bios_init(&io->write, c, &io_opts);
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user