]> git.baikalelectronics.ru Git - kernel.git/commitdiff
md/raid5: Factor out ahead_of_reshape() function
authorLogan Gunthorpe <logang@deltatee.com>
Thu, 16 Jun 2022 19:19:32 +0000 (13:19 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 2 Aug 2022 23:14:40 +0000 (17:14 -0600)
There are a few uses of an ugly ternary operator in raid5_make_request()
to check if a sector is a head of a reshape sector.

Factor this out into a simple helper called ahead_of_reshape().

No functional changes intended.

Suggested-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Song Liu <song@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/raid5.c

index 6bf6f9fd132283c467c47fa0d7512242dad212cd..61dffe5b2aa69e0a30f48719f38836cccb944e47 100644 (file)
@@ -5785,6 +5785,13 @@ static void make_discard_request(struct mddev *mddev, struct bio *bi)
        bio_endio(bi);
 }
 
+static bool ahead_of_reshape(struct mddev *mddev, sector_t sector,
+                            sector_t reshape_sector)
+{
+       return mddev->reshape_backwards ? sector < reshape_sector :
+                                         sector >= reshape_sector;
+}
+
 static bool raid5_make_request(struct mddev *mddev, struct bio * bi)
 {
        struct r5conf *conf = mddev->private;
@@ -5841,9 +5848,8 @@ static bool raid5_make_request(struct mddev *mddev, struct bio * bi)
        /* Bail out if conflicts with reshape and REQ_NOWAIT is set */
        if ((bi->bi_opf & REQ_NOWAIT) &&
            (conf->reshape_progress != MaxSector) &&
-           (mddev->reshape_backwards
-           ? (logical_sector >= conf->reshape_progress && logical_sector < conf->reshape_safe)
-           : (logical_sector >= conf->reshape_safe && logical_sector < conf->reshape_progress))) {
+           !ahead_of_reshape(mddev, logical_sector, conf->reshape_progress) &&
+           ahead_of_reshape(mddev, logical_sector, conf->reshape_safe)) {
                bio_wouldblock_error(bi);
                if (rw == WRITE)
                        md_write_end(mddev);
@@ -5872,14 +5878,12 @@ static bool raid5_make_request(struct mddev *mddev, struct bio * bi)
                         * to check again.
                         */
                        spin_lock_irq(&conf->device_lock);
-                       if (mddev->reshape_backwards
-                           ? logical_sector < conf->reshape_progress
-                           : logical_sector >= conf->reshape_progress) {
+                       if (ahead_of_reshape(mddev, logical_sector,
+                                            conf->reshape_progress)) {
                                previous = 1;
                        } else {
-                               if (mddev->reshape_backwards
-                                   ? logical_sector < conf->reshape_safe
-                                   : logical_sector >= conf->reshape_safe) {
+                               if (ahead_of_reshape(mddev, logical_sector,
+                                                    conf->reshape_safe)) {
                                        spin_unlock_irq(&conf->device_lock);
                                        schedule();
                                        do_prepare = true;
@@ -5910,9 +5914,8 @@ static bool raid5_make_request(struct mddev *mddev, struct bio * bi)
                                 */
                                int must_retry = 0;
                                spin_lock_irq(&conf->device_lock);
-                               if (mddev->reshape_backwards
-                                   ? logical_sector >= conf->reshape_progress
-                                   : logical_sector < conf->reshape_progress)
+                               if (!ahead_of_reshape(mddev, logical_sector,
+                                                     conf->reshape_progress))
                                        /* mismatch, need to try again */
                                        must_retry = 1;
                                spin_unlock_irq(&conf->device_lock);