提交 abb49e87 编写于 作者: C Christoph Hellwig 提交者: David Sterba

btrfs: raid56: simplify error handling and code flow in raid56_parity_write

Handle the error return on alloc_rbio failure directly instead of using
a goto and remove the queue_rbio goto label by moving the plugged
check into the if branch.
Reviewed-by: NJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: NQu Wenruo <wqu@suse.com>
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Reviewed-by: NDavid Sterba <dsterba@suse.com>
Signed-off-by: NDavid Sterba <dsterba@suse.com>
上级 79b02ec1
...@@ -1667,12 +1667,12 @@ void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc) ...@@ -1667,12 +1667,12 @@ void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc)
struct btrfs_raid_bio *rbio; struct btrfs_raid_bio *rbio;
struct btrfs_plug_cb *plug = NULL; struct btrfs_plug_cb *plug = NULL;
struct blk_plug_cb *cb; struct blk_plug_cb *cb;
int ret = 0;
rbio = alloc_rbio(fs_info, bioc); rbio = alloc_rbio(fs_info, bioc);
if (IS_ERR(rbio)) { if (IS_ERR(rbio)) {
ret = PTR_ERR(rbio); bio->bi_status = errno_to_blk_status(PTR_ERR(rbio));
goto fail; bio_endio(bio);
return;
} }
rbio->operation = BTRFS_RBIO_WRITE; rbio->operation = BTRFS_RBIO_WRITE;
rbio_add_bio(rbio, bio); rbio_add_bio(rbio, bio);
...@@ -1681,31 +1681,24 @@ void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc) ...@@ -1681,31 +1681,24 @@ void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc)
* Don't plug on full rbios, just get them out the door * Don't plug on full rbios, just get them out the door
* as quickly as we can * as quickly as we can
*/ */
if (rbio_is_full(rbio)) if (!rbio_is_full(rbio)) {
goto queue_rbio; cb = blk_check_plugged(raid_unplug, fs_info, sizeof(*plug));
if (cb) {
cb = blk_check_plugged(raid_unplug, fs_info, sizeof(*plug)); plug = container_of(cb, struct btrfs_plug_cb, cb);
if (cb) { if (!plug->info) {
plug = container_of(cb, struct btrfs_plug_cb, cb); plug->info = fs_info;
if (!plug->info) { INIT_LIST_HEAD(&plug->rbio_list);
plug->info = fs_info; }
INIT_LIST_HEAD(&plug->rbio_list); list_add_tail(&rbio->plug_list, &plug->rbio_list);
return;
} }
list_add_tail(&rbio->plug_list, &plug->rbio_list);
return;
} }
queue_rbio:
/* /*
* Either we don't have any existing plug, or we're doing a full stripe, * Either we don't have any existing plug, or we're doing a full stripe,
* can queue the rmw work now. * queue the rmw work now.
*/ */
start_async_work(rbio, rmw_rbio_work); start_async_work(rbio, rmw_rbio_work);
return;
fail:
bio->bi_status = errno_to_blk_status(ret);
bio_endio(bio);
} }
static int verify_one_sector(struct btrfs_raid_bio *rbio, static int verify_one_sector(struct btrfs_raid_bio *rbio,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册