Skip to content

Commit f61f929

Browse files
bdev: remove all aliases on unregister
All aliases are removed when bdev is unregistered. Change-Id: I2b15eb49572d4fc2eedec8eb8b2dcad5d5406b1f Signed-off-by: Tiago Castro <[email protected]> Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/27179 Reviewed-by: Jim Harris <[email protected]> Tested-by: SPDK Automated Test System <[email protected]> Community-CI: Mellanox Build Bot Reviewed-by: Jacek Kalwas <[email protected]>
1 parent fd23310 commit f61f929

File tree

4 files changed

+56
-7
lines changed

4 files changed

+56
-7
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## v25.05.1: (Upcoming Release)
44

5+
### bdev
6+
7+
All aliases are now removed from the block device names list upon unregistration.
8+
59
## v25.05: NVMe PCIe interrupt mode, DIF insert/strip, mlx5 accel platform driver
610

711
### accel_mlx5

include/spdk/bdev_module.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,6 +1243,7 @@ void spdk_bdev_module_fini_start_done(void);
12431243
/**
12441244
* Add alias to block device names list.
12451245
* Aliases can be add only to registered bdev.
1246+
* All aliases are removed when bdev is unregistered.
12461247
*
12471248
* \param bdev Block device to query.
12481249
* \param alias Alias to be added to list.

lib/bdev/bdev.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5054,18 +5054,24 @@ spdk_bdev_alias_del(struct spdk_bdev *bdev, const char *alias)
50545054
return rc;
50555055
}
50565056

5057-
void
5058-
spdk_bdev_alias_del_all(struct spdk_bdev *bdev)
5057+
static void
5058+
bdev_alias_del_all(struct spdk_bdev *bdev, void (*alias_del_fn)(struct spdk_bdev_name *n))
50595059
{
50605060
struct spdk_bdev_alias *p, *tmp;
50615061

50625062
TAILQ_FOREACH_SAFE(p, &bdev->aliases, tailq, tmp) {
50635063
TAILQ_REMOVE(&bdev->aliases, p, tailq);
5064-
bdev_name_del(&p->alias);
5064+
alias_del_fn(&p->alias);
50655065
free(p);
50665066
}
50675067
}
50685068

5069+
void
5070+
spdk_bdev_alias_del_all(struct spdk_bdev *bdev)
5071+
{
5072+
bdev_alias_del_all(bdev, bdev_name_del);
5073+
}
5074+
50695075
struct spdk_io_channel *
50705076
spdk_bdev_get_io_channel(struct spdk_bdev_desc *desc)
50715077
{
@@ -8408,7 +8414,6 @@ bdev_unregister_unsafe(struct spdk_bdev *bdev)
84088414
struct spdk_bdev_desc *desc, *tmp;
84098415
struct spdk_bdev_alias *alias;
84108416
int rc = 0;
8411-
char uuid[SPDK_UUID_STRING_LEN];
84128417

84138418
assert(spdk_spin_held(&g_bdev_mgr.spinlock));
84148419
assert(spdk_spin_held(&bdev->internal.spinlock));
@@ -8431,13 +8436,12 @@ bdev_unregister_unsafe(struct spdk_bdev *bdev)
84318436
TAILQ_FOREACH(alias, &bdev->aliases, tailq) {
84328437
bdev_examine_allowlist_remove(alias->alias.name);
84338438
}
8439+
bdev_alias_del_all(bdev, bdev_name_del_unsafe);
84348440
TAILQ_REMOVE(&g_bdev_mgr.bdevs, bdev, internal.link);
84358441
SPDK_DEBUGLOG(bdev, "Removing bdev %s from list done\n", bdev->name);
84368442

8437-
/* Delete the name and the UUID alias */
8438-
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &bdev->uuid);
8443+
/* Delete the name */
84398444
bdev_name_del_unsafe(&bdev->internal.bdev_name);
8440-
bdev_alias_del(bdev, uuid, bdev_name_del_unsafe);
84418445

84428446
spdk_notify_send("bdev_unregister", spdk_bdev_get_name(bdev));
84438447

test/unit/lib/bdev/bdev.c/bdev_ut.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,6 +1132,45 @@ alias_add_del_test(void)
11321132
ut_fini_bdev();
11331133
}
11341134

1135+
static void
1136+
alias_add_del_all_test(void)
1137+
{
1138+
struct spdk_bdev *bdev;
1139+
char uuid[SPDK_UUID_STRING_LEN];
1140+
int rc;
1141+
1142+
ut_init_bdev(NULL);
1143+
1144+
bdev = allocate_bdev("bdev");
1145+
SPDK_CU_ASSERT_FATAL(bdev != 0);
1146+
1147+
poll_threads();
1148+
1149+
/* Check that an UUID alias was registered */
1150+
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &bdev->uuid);
1151+
CU_ASSERT_EQUAL(spdk_bdev_get_by_name(uuid), bdev);
1152+
1153+
rc = spdk_bdev_alias_add(bdev, "custom-alias");
1154+
CU_ASSERT(rc == 0);
1155+
1156+
CU_ASSERT_PTR_NOT_NULL(spdk_bdev_get_by_name(uuid));
1157+
CU_ASSERT_PTR_NOT_NULL(spdk_bdev_get_by_name("bdev"));
1158+
CU_ASSERT_PTR_NOT_NULL(spdk_bdev_get_by_name("custom-alias"));
1159+
1160+
/* Unregister and free bdev */
1161+
spdk_bdev_unregister(bdev, NULL, NULL);
1162+
1163+
poll_threads();
1164+
1165+
CU_ASSERT_PTR_NULL(spdk_bdev_get_by_name(uuid));
1166+
CU_ASSERT_PTR_NULL(spdk_bdev_get_by_name("bdev"));
1167+
CU_ASSERT_PTR_NULL(spdk_bdev_get_by_name("custom-alias"));
1168+
1169+
free(bdev);
1170+
1171+
ut_fini_bdev();
1172+
}
1173+
11351174
static void
11361175
io_done(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
11371176
{
@@ -7772,6 +7811,7 @@ main(int argc, char **argv)
77727811
CU_ADD_TEST(suite, open_write_test);
77737812
CU_ADD_TEST(suite, claim_test);
77747813
CU_ADD_TEST(suite, alias_add_del_test);
7814+
CU_ADD_TEST(suite, alias_add_del_all_test);
77757815
CU_ADD_TEST(suite, get_device_stat_test);
77767816
CU_ADD_TEST(suite, bdev_io_types_test);
77777817
CU_ADD_TEST(suite, bdev_io_wait_test);

0 commit comments

Comments
 (0)