raid1: factor out a common routine to handle the completion of sync write
authorHou Tao <houtao1@huawei.com>
Sat, 27 Jul 2019 06:02:58 +0000 (14:02 +0800)
committerSong Liu <songliubraving@fb.com>
Wed, 7 Aug 2019 17:25:02 +0000 (10:25 -0700)
It's just code clean-up.

Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
drivers/md/raid1.c

index cd80f28..6ea4f26 100644 (file)
@@ -1906,6 +1906,22 @@ static void abort_sync_write(struct mddev *mddev, struct r1bio *r1_bio)
        } while (sectors_to_go > 0);
 }
 
+static void put_sync_write_buf(struct r1bio *r1_bio, int uptodate)
+{
+       if (atomic_dec_and_test(&r1_bio->remaining)) {
+               struct mddev *mddev = r1_bio->mddev;
+               int s = r1_bio->sectors;
+
+               if (test_bit(R1BIO_MadeGood, &r1_bio->state) ||
+                   test_bit(R1BIO_WriteError, &r1_bio->state))
+                       reschedule_retry(r1_bio);
+               else {
+                       put_buf(r1_bio);
+                       md_done_sync(mddev, s, uptodate);
+               }
+       }
+}
+
 static void end_sync_write(struct bio *bio)
 {
        int uptodate = !bio->bi_status;
@@ -1932,16 +1948,7 @@ static void end_sync_write(struct bio *bio)
                )
                set_bit(R1BIO_MadeGood, &r1_bio->state);
 
-       if (atomic_dec_and_test(&r1_bio->remaining)) {
-               int s = r1_bio->sectors;
-               if (test_bit(R1BIO_MadeGood, &r1_bio->state) ||
-                   test_bit(R1BIO_WriteError, &r1_bio->state))
-                       reschedule_retry(r1_bio);
-               else {
-                       put_buf(r1_bio);
-                       md_done_sync(mddev, s, uptodate);
-               }
-       }
+       put_sync_write_buf(r1_bio, uptodate);
 }
 
 static int r1_sync_page_io(struct md_rdev *rdev, sector_t sector,
@@ -2224,17 +2231,7 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
                generic_make_request(wbio);
        }
 
-       if (atomic_dec_and_test(&r1_bio->remaining)) {
-               /* if we're here, all write(s) have completed, so clean up */
-               int s = r1_bio->sectors;
-               if (test_bit(R1BIO_MadeGood, &r1_bio->state) ||
-                   test_bit(R1BIO_WriteError, &r1_bio->state))
-                       reschedule_retry(r1_bio);
-               else {
-                       put_buf(r1_bio);
-                       md_done_sync(mddev, s, 1);
-               }
-       }
+       put_sync_write_buf(r1_bio, 1);
 }
 
 /*