RDMA/device: Check that the rename is nop under the lock
authorJason Gunthorpe <jgg@mellanox.com>
Thu, 7 Feb 2019 05:41:47 +0000 (22:41 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 8 Feb 2019 23:56:45 +0000 (16:56 -0700)
Since another rename could be running in parallel it is safer to check
that the name is not changing inside the lock, where we already know the
device name will not change.

Fixes: d21943dd19b5 ("RDMA/core: Implement IB device rename function")
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
drivers/infiniband/core/device.c

index 57e1e177921ef04833c318406b2141efc50ffc49..60083bde3e39f9446a593b39248a63905906221d 100644 (file)
@@ -189,12 +189,14 @@ static struct ib_device *__ib_device_get_by_name(const char *name)
 
 int ib_device_rename(struct ib_device *ibdev, const char *name)
 {
-       int ret = 0;
-
-       if (!strcmp(name, dev_name(&ibdev->dev)))
-               return ret;
+       int ret;
 
        mutex_lock(&device_mutex);
+       if (!strcmp(name, dev_name(&ibdev->dev))) {
+               ret = 0;
+               goto out;
+       }
+
        if (__ib_device_get_by_name(name)) {
                ret = -EEXIST;
                goto out;