mirror of
https://github.com/torvalds/linux.git
synced 2024-12-22 02:52:56 +00:00
drbd: remove /proc/drbd before unregistering from netlink
There still exists a (theoretical) race on module unload, where /proc/drbd may still exist, but the netlink callback has been unregistered already, allowing drbdsetup to shout without listeners, and get no reply. Reorder remove_proc_entry and unregister of netlink callback. drbdsetup first checks for existence of the proc entry, and if that is missing, won't even try to contact the module. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
parent
3da127fa88
commit
17a93f3007
@ -3174,11 +3174,20 @@ static void drbd_cleanup(void)
|
||||
|
||||
unregister_reboot_notifier(&drbd_notifier);
|
||||
|
||||
/* first remove proc,
|
||||
* drbdsetup uses it's presence to detect
|
||||
* whether DRBD is loaded.
|
||||
* If we would get stuck in proc removal,
|
||||
* but have netlink already deregistered,
|
||||
* some drbdsetup commands may wait forever
|
||||
* for an answer.
|
||||
*/
|
||||
if (drbd_proc)
|
||||
remove_proc_entry("drbd", NULL);
|
||||
|
||||
drbd_nl_cleanup();
|
||||
|
||||
if (minor_table) {
|
||||
if (drbd_proc)
|
||||
remove_proc_entry("drbd", NULL);
|
||||
i = minor_count;
|
||||
while (i--)
|
||||
drbd_delete_device(i);
|
||||
|
Loading…
Reference in New Issue
Block a user