diff --git a/module/bdev/raid/bdev_raid_rpc.c b/module/bdev/raid/bdev_raid_rpc.c index bc1fb9af2..27bc2c466 100644 --- a/module/bdev/raid/bdev_raid_rpc.c +++ b/module/bdev/raid/bdev_raid_rpc.c @@ -130,6 +130,9 @@ struct rpc_bdev_raid_create { /* UUID for this raid bdev */ char *uuid; + + /* superblock support */ + bool superblock; }; /* @@ -196,6 +199,7 @@ static const struct spdk_json_object_decoder rpc_bdev_raid_create_decoders[] = { {"raid_level", offsetof(struct rpc_bdev_raid_create, level), decode_raid_level}, {"base_bdevs", offsetof(struct rpc_bdev_raid_create, base_bdevs), decode_base_bdevs}, {"uuid", offsetof(struct rpc_bdev_raid_create, uuid), spdk_json_decode_string, true}, + {"superblock", offsetof(struct rpc_bdev_raid_create, superblock), spdk_json_decode_bool, true}, }; /* diff --git a/python/spdk/rpc/bdev.py b/python/spdk/rpc/bdev.py index 5486f0975..7c3f95cc7 100644 --- a/python/spdk/rpc/bdev.py +++ b/python/spdk/rpc/bdev.py @@ -401,7 +401,7 @@ def bdev_raid_get_bdevs(client, category): return client.call('bdev_raid_get_bdevs', params) -def bdev_raid_create(client, name, raid_level, base_bdevs, strip_size=None, strip_size_kb=None, uuid=None): +def bdev_raid_create(client, name, raid_level, base_bdevs, strip_size=None, strip_size_kb=None, uuid=None, superblock=False): """Create raid bdev. Either strip size arg will work but one is required. Args: @@ -411,11 +411,13 @@ def bdev_raid_create(client, name, raid_level, base_bdevs, strip_size=None, stri raid_level: raid level of raid bdev, supported values 0 base_bdevs: Space separated names of Nvme bdevs in double quotes, like "Nvme0n1 Nvme1n1 Nvme2n1" uuid: UUID for this raid bdev (optional) + superblock: information about raid bdev will be stored in superblock on each base bdev, + disabled by default due to backward compatibility Returns: None """ - params = {'name': name, 'raid_level': raid_level, 'base_bdevs': base_bdevs} + params = {'name': name, 'raid_level': raid_level, 'base_bdevs': base_bdevs, 'superblock': superblock} if strip_size: params['strip_size'] = strip_size diff --git a/scripts/rpc.py b/scripts/rpc.py index 741fd37a6..c6686e9d4 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -2092,13 +2092,16 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse strip_size_kb=args.strip_size_kb, raid_level=args.raid_level, base_bdevs=base_bdevs, - uuid=args.uuid) + uuid=args.uuid, + superblock=args.superblock) p = subparsers.add_parser('bdev_raid_create', help='Create new raid bdev') p.add_argument('-n', '--name', help='raid bdev name', required=True) p.add_argument('-z', '--strip-size-kb', help='strip size in KB', type=int) p.add_argument('-r', '--raid-level', help='raid level, raid0, raid1 and a special level concat are supported', required=True) p.add_argument('-b', '--base-bdevs', help='base bdevs name, whitespace separated list in quotes', required=True) p.add_argument('--uuid', help='UUID for this raid bdev', required=False) + p.add_argument('-s', '--superblock', help='information about raid bdev will be stored in superblock on each base bdev, ' + 'disabled by default due to backward compatibility', action='store_true') p.set_defaults(func=bdev_raid_create) def bdev_raid_delete(args): diff --git a/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c b/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c index b35b7ff11..cc80c5010 100644 --- a/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c +++ b/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c @@ -97,6 +97,7 @@ DEFINE_STUB(spdk_json_decode_uint32, int, (const struct spdk_json_val *val, void DEFINE_STUB(spdk_json_decode_array, int, (const struct spdk_json_val *values, spdk_json_decode_fn decode_func, void *out, size_t max_size, size_t *out_size, size_t stride), 0); +DEFINE_STUB(spdk_json_decode_bool, int, (const struct spdk_json_val *val, void *out), 0); DEFINE_STUB(spdk_json_write_name, int, (struct spdk_json_write_ctx *w, const char *name), 0); DEFINE_STUB(spdk_json_write_object_begin, int, (struct spdk_json_write_ctx *w), 0); DEFINE_STUB(spdk_json_write_named_object_begin, int, (struct spdk_json_write_ctx *w,