dm: add helper macro for simple DM target module init and exit
authorYangtao Li <frank.li@vivo.com>
Sun, 9 Apr 2023 16:43:37 +0000 (00:43 +0800)
committerMike Snitzer <snitzer@kernel.org>
Tue, 11 Apr 2023 16:09:08 +0000 (12:09 -0400)
Eliminate duplicate boilerplate code for simple modules that contain
a single DM target driver without any additional setup code.

Add a new module_dm() macro, which replaces the module_init() and
module_exit() with template functions that call dm_register_target()
and dm_unregister_target() respectively.

Signed-off-by: Yangtao Li <frank.li@vivo.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
15 files changed:
drivers/md/dm-crypt.c
drivers/md/dm-delay.c
drivers/md/dm-dust.c
drivers/md/dm-ebs-target.c
drivers/md/dm-era-target.c
drivers/md/dm-flakey.c
drivers/md/dm-log-writes.c
drivers/md/dm-raid.c
drivers/md/dm-switch.c
drivers/md/dm-unstripe.c
drivers/md/dm-verity-target.c
drivers/md/dm-writecache.c
drivers/md/dm-zero.c
drivers/md/dm-zoned-target.c
include/linux/device-mapper.h

index 52615a258e13c587534d89c1aac9394a2e16b163..8b47b913ee831c338b1294e31489ad7930225cce 100644 (file)
@@ -3659,19 +3659,7 @@ static struct target_type crypt_target = {
        .iterate_devices = crypt_iterate_devices,
        .io_hints = crypt_io_hints,
 };
-
-static int __init dm_crypt_init(void)
-{
-       return dm_register_target(&crypt_target);
-}
-
-static void __exit dm_crypt_exit(void)
-{
-       dm_unregister_target(&crypt_target);
-}
-
-module_init(dm_crypt_init);
-module_exit(dm_crypt_exit);
+module_dm(crypt);
 
 MODULE_AUTHOR("Jana Saout <jana@saout.de>");
 MODULE_DESCRIPTION(DM_NAME " target for transparent encryption / decryption");
index 00d18b2070a5b94d7972d6fe94325c5ce3cf0ab1..7433525e59856011db74d5abc62ea5b905cab2e8 100644 (file)
@@ -367,20 +367,7 @@ static struct target_type delay_target = {
        .status      = delay_status,
        .iterate_devices = delay_iterate_devices,
 };
-
-static int __init dm_delay_init(void)
-{
-       return dm_register_target(&delay_target);
-}
-
-static void __exit dm_delay_exit(void)
-{
-       dm_unregister_target(&delay_target);
-}
-
-/* Module hooks */
-module_init(dm_delay_init);
-module_exit(dm_delay_exit);
+module_dm(delay);
 
 MODULE_DESCRIPTION(DM_NAME " delay target");
 MODULE_AUTHOR("Heinz Mauelshagen <mauelshagen@redhat.com>");
index 9bf3cdf548de2063f97fff7c9cec93a52a67cc76..12a377e06d02317fe3e3c9366d566f24329122b5 100644 (file)
@@ -570,19 +570,7 @@ static struct target_type dust_target = {
        .status = dust_status,
        .prepare_ioctl = dust_prepare_ioctl,
 };
-
-static int __init dm_dust_init(void)
-{
-       return dm_register_target(&dust_target);
-}
-
-static void __exit dm_dust_exit(void)
-{
-       dm_unregister_target(&dust_target);
-}
-
-module_init(dm_dust_init);
-module_exit(dm_dust_exit);
+module_dm(dust);
 
 MODULE_DESCRIPTION(DM_NAME " dust test target");
 MODULE_AUTHOR("Bryan Gurney <dm-devel@redhat.com>");
index 38da4de3ecbfc429a04168a71049a9dcea43db47..435b45201f4d61939e0429f470c26560f6b78762 100644 (file)
@@ -452,19 +452,7 @@ static struct target_type ebs_target = {
        .prepare_ioctl   = ebs_prepare_ioctl,
        .iterate_devices = ebs_iterate_devices,
 };
-
-static int __init dm_ebs_init(void)
-{
-       return dm_register_target(&ebs_target);
-}
-
-static void dm_ebs_exit(void)
-{
-       dm_unregister_target(&ebs_target);
-}
-
-module_init(dm_ebs_init);
-module_exit(dm_ebs_exit);
+module_dm(ebs);
 
 MODULE_AUTHOR("Heinz Mauelshagen <dm-devel@redhat.com>");
 MODULE_DESCRIPTION(DM_NAME " emulated block size target");
index 554d234fca185f427f173f5caf5812e18cbc88f8..0d70914217eedcf715330cfa6f89d2469876c34a 100644 (file)
@@ -1753,19 +1753,7 @@ static struct target_type era_target = {
        .iterate_devices = era_iterate_devices,
        .io_hints = era_io_hints
 };
-
-static int __init dm_era_init(void)
-{
-       return dm_register_target(&era_target);
-}
-
-static void __exit dm_era_exit(void)
-{
-       dm_unregister_target(&era_target);
-}
-
-module_init(dm_era_init);
-module_exit(dm_era_exit);
+module_dm(era);
 
 MODULE_DESCRIPTION(DM_NAME " era target");
 MODULE_AUTHOR("Joe Thornber <ejt@redhat.com>");
index 14179355e6a12e88d94957bf68e6b09c03b4ecdd..ebcfb99b186b6e742bcf507746b98b820f7b1604 100644 (file)
@@ -506,20 +506,7 @@ static struct target_type flakey_target = {
        .prepare_ioctl = flakey_prepare_ioctl,
        .iterate_devices = flakey_iterate_devices,
 };
-
-static int __init dm_flakey_init(void)
-{
-       return dm_register_target(&flakey_target);
-}
-
-static void __exit dm_flakey_exit(void)
-{
-       dm_unregister_target(&flakey_target);
-}
-
-/* Module hooks */
-module_init(dm_flakey_init);
-module_exit(dm_flakey_exit);
+module_dm(flakey);
 
 MODULE_DESCRIPTION(DM_NAME " flakey target");
 MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>");
index 6d7436d2fd7ff9bf987a88dd07b3722a5ad071e0..f17a6cf2284ecf1a9530109c6a1d09939c3e67de 100644 (file)
@@ -937,19 +937,7 @@ static struct target_type log_writes_target = {
        .dax_zero_page_range = log_writes_dax_zero_page_range,
        .dax_recovery_write = log_writes_dax_recovery_write,
 };
-
-static int __init dm_log_writes_init(void)
-{
-       return dm_register_target(&log_writes_target);
-}
-
-static void __exit dm_log_writes_exit(void)
-{
-       dm_unregister_target(&log_writes_target);
-}
-
-module_init(dm_log_writes_init);
-module_exit(dm_log_writes_exit);
+module_dm(log_writes);
 
 MODULE_DESCRIPTION(DM_NAME " log writes target");
 MODULE_AUTHOR("Josef Bacik <jbacik@fb.com>");
index 2dfd51509647be43e4c9bd78d2b64dcbccdbbb6d..c8821fcb829986a0f32fad6be95c95033b514f53 100644 (file)
@@ -4077,23 +4077,7 @@ static struct target_type raid_target = {
        .preresume = raid_preresume,
        .resume = raid_resume,
 };
-
-static int __init dm_raid_init(void)
-{
-       DMINFO("Loading target version %u.%u.%u",
-              raid_target.version[0],
-              raid_target.version[1],
-              raid_target.version[2]);
-       return dm_register_target(&raid_target);
-}
-
-static void __exit dm_raid_exit(void)
-{
-       dm_unregister_target(&raid_target);
-}
-
-module_init(dm_raid_init);
-module_exit(dm_raid_exit);
+module_dm(raid);
 
 module_param(devices_handle_discard_safely, bool, 0644);
 MODULE_PARM_DESC(devices_handle_discard_safely,
index 5a5976b0cfb8edddaf2a5832cd035cc8ad9e3902..dfd9fb52a6f333f3003f7f51af3e38f902725c4a 100644 (file)
@@ -565,19 +565,7 @@ static struct target_type switch_target = {
        .prepare_ioctl = switch_prepare_ioctl,
        .iterate_devices = switch_iterate_devices,
 };
-
-static int __init dm_switch_init(void)
-{
-       return dm_register_target(&switch_target);
-}
-
-static void __exit dm_switch_exit(void)
-{
-       dm_unregister_target(&switch_target);
-}
-
-module_init(dm_switch_init);
-module_exit(dm_switch_exit);
+module_dm(switch);
 
 MODULE_DESCRIPTION(DM_NAME " dynamic path switching target");
 MODULE_AUTHOR("Kevin D. O'Kelley <Kevin_OKelley@dell.com>");
index e7b7d5983a164e5842fa6020fce8df6eb8a56869..48587c16c44570b6e0880172ad979aaa2cf10c58 100644 (file)
@@ -192,19 +192,7 @@ static struct target_type unstripe_target = {
        .iterate_devices = unstripe_iterate_devices,
        .io_hints = unstripe_io_hints,
 };
-
-static int __init dm_unstripe_init(void)
-{
-       return dm_register_target(&unstripe_target);
-}
-
-static void __exit dm_unstripe_exit(void)
-{
-       dm_unregister_target(&unstripe_target);
-}
-
-module_init(dm_unstripe_init);
-module_exit(dm_unstripe_exit);
+module_dm(unstripe);
 
 MODULE_DESCRIPTION(DM_NAME " unstriped target");
 MODULE_ALIAS("dm-unstriped");
index 260f04d129829919803d0149ece6a562bcf1a6b5..e35c16e06d0658a3632ff8ebbf40774027ab0a94 100644 (file)
@@ -1514,19 +1514,7 @@ static struct target_type verity_target = {
        .iterate_devices = verity_iterate_devices,
        .io_hints       = verity_io_hints,
 };
-
-static int __init dm_verity_init(void)
-{
-       return dm_register_target(&verity_target);
-}
-
-static void __exit dm_verity_exit(void)
-{
-       dm_unregister_target(&verity_target);
-}
-
-module_init(dm_verity_init);
-module_exit(dm_verity_exit);
+module_dm(verity);
 
 MODULE_AUTHOR("Mikulas Patocka <mpatocka@redhat.com>");
 MODULE_AUTHOR("Mandeep Baines <msb@chromium.org>");
index 81b60b75a9fa98f69142941fa62edfffae0ba23c..074cb785eafc19172b9ebf4b6a6f2ae4591563d6 100644 (file)
@@ -2773,19 +2773,7 @@ static struct target_type writecache_target = {
        .iterate_devices        = writecache_iterate_devices,
        .io_hints               = writecache_io_hints,
 };
-
-static int __init dm_writecache_init(void)
-{
-       return dm_register_target(&writecache_target);
-}
-
-static void __exit dm_writecache_exit(void)
-{
-       dm_unregister_target(&writecache_target);
-}
-
-module_init(dm_writecache_init);
-module_exit(dm_writecache_exit);
+module_dm(writecache);
 
 MODULE_DESCRIPTION(DM_NAME " writecache target");
 MODULE_AUTHOR("Mikulas Patocka <dm-devel@redhat.com>");
index 884ac726a74301b9d32dd5f91eea862061905fa0..3b13e6eb1aa47c027329771ba05fc1b5246f36ee 100644 (file)
@@ -75,19 +75,7 @@ static struct target_type zero_target = {
        .map    = zero_map,
        .io_hints = zero_io_hints,
 };
-
-static int __init dm_zero_init(void)
-{
-       return dm_register_target(&zero_target);
-}
-
-static void __exit dm_zero_exit(void)
-{
-       dm_unregister_target(&zero_target);
-}
-
-module_init(dm_zero_init)
-module_exit(dm_zero_exit)
+module_dm(zero);
 
 MODULE_AUTHOR("Jana Saout <jana@saout.de>");
 MODULE_DESCRIPTION(DM_NAME " dummy target returning zeros");
index ad4764dcd013704fabcefb3f3ad14c3f3d7c7f40..ad8e670a2f9be8c12697ad92bb25f60a2e046c46 100644 (file)
@@ -1138,7 +1138,7 @@ static int dmz_message(struct dm_target *ti, unsigned int argc, char **argv,
        return r;
 }
 
-static struct target_type dmz_type = {
+static struct target_type zoned_target = {
        .name            = "zoned",
        .version         = {2, 0, 0},
        .features        = DM_TARGET_SINGLETON | DM_TARGET_MIXED_ZONED_MODEL,
@@ -1154,19 +1154,7 @@ static struct target_type dmz_type = {
        .status          = dmz_status,
        .message         = dmz_message,
 };
-
-static int __init dmz_init(void)
-{
-       return dm_register_target(&dmz_type);
-}
-
-static void __exit dmz_exit(void)
-{
-       dm_unregister_target(&dmz_type);
-}
-
-module_init(dmz_init);
-module_exit(dmz_exit);
+module_dm(zoned);
 
 MODULE_DESCRIPTION(DM_NAME " target for zoned block devices");
 MODULE_AUTHOR("Damien Le Moal <damien.lemoal@wdc.com>");
index 8aa6b3ea91fad68c670aee399d86a9d69d26ba7e..f2d9afb8a7e950cd4d05e27405dce20a97420e6e 100644 (file)
@@ -631,6 +631,26 @@ void dm_destroy_crypto_profile(struct blk_crypto_profile *profile);
                DMEMIT("target_name=%s,target_version=%u.%u.%u", \
                       (y)->name, (y)->version[0], (y)->version[1], (y)->version[2])
 
+/**
+ * module_dm() - Helper macro for DM targets that don't do anything
+ * special in their module_init and module_exit.
+ * Each module may only use this macro once, and calling it replaces
+ * module_init() and module_exit().
+ *
+ * @name: DM target's name
+ */
+#define module_dm(name) \
+static int __init dm_##name##_init(void) \
+{ \
+       return dm_register_target(&(name##_target)); \
+} \
+module_init(dm_##name##_init) \
+static void __exit dm_##name##_exit(void) \
+{ \
+       dm_unregister_target(&(name##_target)); \
+} \
+module_exit(dm_##name##_exit)
+
 /*
  * Definitions of return values from target end_io function.
  */