Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10d3bd09 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Alasdair G Kergon
Browse files

dm: consolidate target deregistration error handling



Change dm_unregister_target to return void and use BUG() for error
reporting.

dm_unregister_target can only fail because of programming bug in the
target driver. It can't fail because of user's behavior or disk errors.

This patch changes unregister_target to return void and use BUG if
someone tries to unregister non-registered target or unregister target
that is in use.

This patch removes code duplication (testing of error codes in all dm
targets) and reports bugs in just one place, in dm_unregister_target. In
some target drivers, these return codes were ignored, which could lead
to a situation where bugs could be missed.

Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent d460c65a
Loading
Loading
Loading
Loading
+1 −5
Original line number Original line Diff line number Diff line
@@ -1322,11 +1322,7 @@ static int __init dm_crypt_init(void)


static void __exit dm_crypt_exit(void)
static void __exit dm_crypt_exit(void)
{
{
	int r = dm_unregister_target(&crypt_target);
	dm_unregister_target(&crypt_target);

	if (r < 0)
		DMERR("unregister failed %d", r);

	kmem_cache_destroy(_crypt_io_pool);
	kmem_cache_destroy(_crypt_io_pool);
}
}


+1 −5
Original line number Original line Diff line number Diff line
@@ -364,11 +364,7 @@ static int __init dm_delay_init(void)


static void __exit dm_delay_exit(void)
static void __exit dm_delay_exit(void)
{
{
	int r = dm_unregister_target(&delay_target);
	dm_unregister_target(&delay_target);

	if (r < 0)
		DMERR("unregister failed %d", r);

	kmem_cache_destroy(delayed_cache);
	kmem_cache_destroy(delayed_cache);
	destroy_workqueue(kdelayd_wq);
	destroy_workqueue(kdelayd_wq);
}
}
+1 −4
Original line number Original line Diff line number Diff line
@@ -156,8 +156,5 @@ int __init dm_linear_init(void)


void dm_linear_exit(void)
void dm_linear_exit(void)
{
{
	int r = dm_unregister_target(&linear_target);
	dm_unregister_target(&linear_target);

	if (r < 0)
		DMERR("unregister failed %d", r);
}
}
+1 −5
Original line number Original line Diff line number Diff line
@@ -1495,14 +1495,10 @@ static int __init dm_multipath_init(void)


static void __exit dm_multipath_exit(void)
static void __exit dm_multipath_exit(void)
{
{
	int r;

	destroy_workqueue(kmpath_handlerd);
	destroy_workqueue(kmpath_handlerd);
	destroy_workqueue(kmultipathd);
	destroy_workqueue(kmultipathd);


	r = dm_unregister_target(&multipath_target);
	dm_unregister_target(&multipath_target);
	if (r < 0)
		DMERR("target unregister failed %d", r);
	kmem_cache_destroy(_mpio_cache);
	kmem_cache_destroy(_mpio_cache);
}
}


+1 −5
Original line number Original line Diff line number Diff line
@@ -1300,11 +1300,7 @@ static int __init dm_mirror_init(void)


static void __exit dm_mirror_exit(void)
static void __exit dm_mirror_exit(void)
{
{
	int r;
	dm_unregister_target(&mirror_target);

	r = dm_unregister_target(&mirror_target);
	if (r < 0)
		DMERR("unregister failed %d", r);
}
}


/* Module hooks */
/* Module hooks */
Loading