diff options
author | Ming Lei <tom.leiming@gmail.com> | 2023-04-27 04:01:36 +0000 |
---|---|---|
committer | Ming Lei <tom.leiming@gmail.com> | 2023-04-27 04:02:17 +0000 |
commit | 53b767ac5771fa5cbfa12e54c6196acb9259eca9 (patch) | |
tree | ec1639f2cf2bb7da325c163c35412bcc81024c74 | |
parent | 7b71b7f5f59b3db50b293d9d4b77739e2f1f3799 (diff) |
tgt_loop: add loop_setup_tgt() helper
Add helper loop_setup_tgt() so that the code for setting target can
be re-used for both initializing and recovering code path.
Signed-off-by: Ming Lei <tom.leiming@gmail.com>
-rw-r--r-- | tgt_loop.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/tgt_loop.cpp b/tgt_loop.cpp index 7e8be6a..12a3fca 100644 --- a/tgt_loop.cpp +++ b/tgt_loop.cpp @@ -31,21 +31,18 @@ static bool backing_supports_discard(char *name) return false; } -static int loop_recovery_tgt(struct ublksrv_dev *dev, int type) +static int loop_setup_tgt(struct ublksrv_dev *dev, int type, bool recovery, + const char *jbuf) { - const struct ublksrv_ctrl_dev *cdev = ublksrv_get_ctrl_dev(dev); - const char *jbuf = ublksrv_ctrl_get_recovery_jbuf(cdev); - const struct ublksrv_ctrl_dev_info *info = - ublksrv_ctrl_get_dev_info(cdev); struct ublksrv_tgt_info *tgt = &dev->tgt; + const struct ublksrv_ctrl_dev_info *info = + ublksrv_ctrl_get_dev_info(ublksrv_get_ctrl_dev(dev)); int fd, ret; long direct_io = 0; struct ublk_params p; char file[PATH_MAX]; ublk_assert(jbuf); - ublk_assert(info->state == UBLK_S_DEV_QUIESCED); - ublk_assert(type == UBLKSRV_TGT_TYPE_LOOP); ret = ublksrv_json_read_target_str_info(jbuf, PATH_MAX, "backing_file", file); if (ret < 0) { @@ -88,11 +85,23 @@ static int loop_recovery_tgt(struct ublksrv_dev *dev, int type) return 0; } +static int loop_recovery_tgt(struct ublksrv_dev *dev, int type) +{ + const struct ublksrv_ctrl_dev *cdev = ublksrv_get_ctrl_dev(dev); + const struct ublksrv_ctrl_dev_info *info = + ublksrv_ctrl_get_dev_info(ublksrv_get_ctrl_dev(dev)); + const char *jbuf = ublksrv_ctrl_get_recovery_jbuf(cdev); + + ublk_assert(type == UBLKSRV_TGT_TYPE_LOOP); + ublk_assert(info->state == UBLK_S_DEV_QUIESCED); + + return loop_setup_tgt(dev, type, true, jbuf); +} + static int loop_init_tgt(struct ublksrv_dev *dev, int type, int argc, char *argv[]) { int buffered_io = 0; - struct ublksrv_tgt_info *tgt = &dev->tgt; const struct ublksrv_ctrl_dev_info *info = ublksrv_ctrl_get_dev_info(ublksrv_get_ctrl_dev(dev)); static const struct option lo_longopts[] = { @@ -185,11 +194,7 @@ static int loop_init_tgt(struct ublksrv_dev *dev, int type, int argc, char buffered_io = 1; } - ublksrv_tgt_set_io_data_size(tgt); - tgt_json.dev_size = tgt->dev_size = bytes; - tgt->tgt_ring_depth = info->queue_depth; - tgt->nr_fds = 1; - tgt->fds[1] = fd; + tgt_json.dev_size = bytes; p.basic.dev_sectors = bytes >> 9; if (st.st_blksize && can_discard) @@ -219,7 +224,9 @@ static int loop_init_tgt(struct ublksrv_dev *dev, int type, int argc, char jbuf = ublksrv_tgt_realloc_json_buf(dev, &jbuf_size); } while (ret < 0); - return 0; + close(fd); + + return loop_setup_tgt(dev, type, false, jbuf); } static void loop_usage_for_add(void) |