]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
md/raid1/10: avoid unnecessary locking
authorShaohua Li <shli@fb.com>
Wed, 10 May 2017 15:47:11 +0000 (08:47 -0700)
committerShaohua Li <shli@fb.com>
Thu, 11 May 2017 22:32:17 +0000 (15:32 -0700)
If we add bios to block plugging list, locking is unnecessry, since the block
unplug is guaranteed not to run at that time.

Reviewed-by: NeilBrown <neilb@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
drivers/md/raid1.c
drivers/md/raid10.c

index 7c1f733988001c3dee5504846099c4da9cc37382..a17ed6218d51628de08639f11509814de2e63b59 100644 (file)
@@ -1529,17 +1529,16 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
                        plug = container_of(cb, struct raid1_plug_cb, cb);
                else
                        plug = NULL;
-               spin_lock_irqsave(&conf->device_lock, flags);
                if (plug) {
                        bio_list_add(&plug->pending, mbio);
                        plug->pending_cnt++;
                } else {
+                       spin_lock_irqsave(&conf->device_lock, flags);
                        bio_list_add(&conf->pending_bio_list, mbio);
                        conf->pending_count++;
-               }
-               spin_unlock_irqrestore(&conf->device_lock, flags);
-               if (!plug)
+                       spin_unlock_irqrestore(&conf->device_lock, flags);
                        md_wakeup_thread(mddev->thread);
+               }
        }
 
        r1_bio_write_done(r1_bio);
index 6b86a0032cf86683834c1ce82fcda6e6bd6b8e80..4343d7ff9916bee9a9a399572c2bd3313723fa3a 100644 (file)
@@ -1282,17 +1282,16 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,
                plug = container_of(cb, struct raid10_plug_cb, cb);
        else
                plug = NULL;
-       spin_lock_irqsave(&conf->device_lock, flags);
        if (plug) {
                bio_list_add(&plug->pending, mbio);
                plug->pending_cnt++;
        } else {
+               spin_lock_irqsave(&conf->device_lock, flags);
                bio_list_add(&conf->pending_bio_list, mbio);
                conf->pending_count++;
-       }
-       spin_unlock_irqrestore(&conf->device_lock, flags);
-       if (!plug)
+               spin_unlock_irqrestore(&conf->device_lock, flags);
                md_wakeup_thread(mddev->thread);
+       }
 }
 
 static void raid10_write_request(struct mddev *mddev, struct bio *bio,