]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
address lock imbalance warnings in smbdirect.c
authorSteve French <smfrench@gmail.com>
Sun, 4 Feb 2018 01:45:07 +0000 (19:45 -0600)
committerSteve French <smfrench@gmail.com>
Wed, 7 Feb 2018 15:36:43 +0000 (09:36 -0600)
Although at least one of these was an overly strict sparse warning
in the new smbdirect code, it is cleaner to fix - so no warnings.

Signed-off-by: Steve French <smfrench@gmail.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
fs/cifs/smbdirect.c

index 5130492847eb15389757b550346ee6608ee76d9a..91710eb571fb3a61a1fe601d2eb72b0e7b15cc8a 100644 (file)
@@ -217,9 +217,10 @@ static void smbd_destroy_rdma_work(struct work_struct *work)
                        spin_unlock_irqrestore(
                                &info->reassembly_queue_lock, flags);
                        put_receive_buffer(info, response);
-               }
+               } else
+                       spin_unlock_irqrestore(&info->reassembly_queue_lock, flags);
        } while (response);
-       spin_unlock_irqrestore(&info->reassembly_queue_lock, flags);
+
        info->reassembly_data_length = 0;
 
        log_rdma_event(INFO, "free receive buffers\n");
@@ -1934,15 +1935,16 @@ static int smbd_recv_buf(struct smbd_connection *info, char *buf,
                                 * No need to lock if we are not at the
                                 * end of the queue
                                 */
-                               if (!queue_length)
+                               if (queue_length)
+                                       list_del(&response->list);
+                               else {
                                        spin_lock_irq(
                                                &info->reassembly_queue_lock);
-                               list_del(&response->list);
-                               queue_removed++;
-                               if (!queue_length)
+                                       list_del(&response->list);
                                        spin_unlock_irq(
                                                &info->reassembly_queue_lock);
-
+                               }
+                               queue_removed++;
                                info->count_reassembly_queue--;
                                info->count_dequeue_reassembly_queue++;
                                put_receive_buffer(info, response);