]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/target/target_core_user.c
Merge tag 'wireless-drivers-for-davem-2019-10-15' of git://git.kernel.org/pub/scm...
[linux.git] / drivers / target / target_core_user.c
index 661bb9358364df814c16fa60614265bce2c8117a..35be1be87d2a172d4cb607acfe6a848ed0f8f4e1 100644 (file)
@@ -1712,6 +1712,24 @@ static int tcmu_init_genl_cmd_reply(struct tcmu_dev *udev, int cmd)
        return 0;
 }
 
+static void tcmu_destroy_genl_cmd_reply(struct tcmu_dev *udev)
+{
+       struct tcmu_nl_cmd *nl_cmd = &udev->curr_nl_cmd;
+
+       if (!tcmu_kern_cmd_reply_supported)
+               return;
+
+       if (udev->nl_reply_supported <= 0)
+               return;
+
+       mutex_lock(&tcmu_nl_cmd_mutex);
+
+       list_del(&nl_cmd->nl_list);
+       memset(nl_cmd, 0, sizeof(*nl_cmd));
+
+       mutex_unlock(&tcmu_nl_cmd_mutex);
+}
+
 static int tcmu_wait_genl_cmd_reply(struct tcmu_dev *udev)
 {
        struct tcmu_nl_cmd *nl_cmd = &udev->curr_nl_cmd;
@@ -1792,6 +1810,8 @@ static int tcmu_netlink_event_send(struct tcmu_dev *udev,
        if (ret == 0 ||
           (ret == -ESRCH && cmd == TCMU_CMD_ADDED_DEVICE))
                return tcmu_wait_genl_cmd_reply(udev);
+       else
+               tcmu_destroy_genl_cmd_reply(udev);
 
        return ret;
 }