lib/bdev: delay bdev_register notification til after examine

"bdev_register" notification was sent right when register
happened, which was misleading for any listener.
Action on the registered bdev might not have been possible
when examine took longer time.

Order of bdev_register notifications in json_config test
was modified, because they are being sent out as pollers
for the spdk_bdev_wait_for_examine() are being processed.
This is only because pollers are inserted at the tail,
and processed from the tail as well.

Order of notifications should not matter, as long as bdevs
are ready for use.

Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I45b769f184b386df2daa4152ee766636ef0668ad
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5213
Community-CI: Broadcom CI
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Tomasz Zawadzki 2020-11-23 08:26:51 -05:00
parent e57bb1afb8
commit 95d8e7a683
2 changed files with 14 additions and 5 deletions

View File

@ -5486,6 +5486,14 @@ bdev_fini(struct spdk_bdev *bdev)
spdk_io_device_unregister(__bdev_to_io_dev(bdev), bdev_destroy_cb);
}
static void
bdev_start_finished(void *arg)
{
struct spdk_bdev *bdev = arg;
spdk_notify_send("bdev_register", spdk_bdev_get_name(bdev));
}
static void
bdev_start(struct spdk_bdev *bdev)
{
@ -5494,6 +5502,8 @@ bdev_start(struct spdk_bdev *bdev)
/* Examine configuration before initializing I/O */
bdev_examine(bdev);
spdk_bdev_wait_for_examine(bdev_start_finished, bdev);
}
int
@ -5505,7 +5515,6 @@ spdk_bdev_register(struct spdk_bdev *bdev)
bdev_start(bdev);
}
spdk_notify_send("bdev_register", spdk_bdev_get_name(bdev));
return rc;
}

View File

@ -175,15 +175,15 @@ function create_bdev_subsystem_config() {
expected_notifications+=(
bdev_register:${lvol_store_base_bdev}
bdev_register:${lvol_store_base_bdev}p0
bdev_register:${lvol_store_base_bdev}p1
bdev_register:${lvol_store_base_bdev}p0
bdev_register:Malloc3
bdev_register:PTBdevFromMalloc3
bdev_register:Null0
bdev_register:Malloc0p0
bdev_register:Malloc0p1
bdev_register:Malloc0p2
bdev_register:Malloc0
bdev_register:Malloc0p2
bdev_register:Malloc0p1
bdev_register:Malloc0p0
bdev_register:Malloc1
)