OSDN Git Service

scsi: target: tcmu: wait for nl reply only if there are listeners or during an add
authorCathy Avery <cavery@redhat.com>
Thu, 28 Feb 2019 19:28:24 +0000 (14:28 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 7 Mar 2019 00:26:13 +0000 (19:26 -0500)
genlmsg_multicast_allns now returns the correct statuses when a message is
sent to a listener. However in the case of adding a device we want to wait
for the listener otherwise we may miss the the device during startup.

Signed-off-by: Cathy Avery <cavery@redhat.com>
Acked-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_user.c

index 1e6d249..396c2fa 100644 (file)
@@ -1764,11 +1764,12 @@ static int tcmu_netlink_event_send(struct tcmu_dev *udev,
 
        ret = genlmsg_multicast_allns(&tcmu_genl_family, skb, 0,
                                      TCMU_MCGRP_CONFIG, GFP_KERNEL);
-       /* We don't care if no one is listening */
-       if (ret == -ESRCH)
-               ret = 0;
-       if (!ret)
-               ret = tcmu_wait_genl_cmd_reply(udev);
+
+       /* Wait during an add as the listener may not be up yet */
+       if (ret == 0 ||
+          (ret == -ESRCH && cmd == TCMU_CMD_ADDED_DEVICE))
+               return tcmu_wait_genl_cmd_reply(udev);
+
        return ret;
 }