]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/md/linear.c
Merge tag 'armsoc-drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[karo-tx-linux.git] / drivers / md / linear.c
index 86f5d435901d1d0af0f66a69dd46bc46e6b25434..5975c99156841ecd25f1210457e6612dc4191227 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/seq_file.h>
 #include <linux/module.h>
 #include <linux/slab.h>
+#include <trace/events/block.h>
 #include "md.h"
 #include "linear.h"
 
@@ -101,8 +102,8 @@ static struct linear_conf *linear_conf(struct mddev *mddev, int raid_disks)
                sector_t sectors;
 
                if (j < 0 || j >= raid_disks || disk->rdev) {
-                       printk(KERN_ERR "md/linear:%s: disk numbering problem. Aborting!\n",
-                              mdname(mddev));
+                       pr_warn("md/linear:%s: disk numbering problem. Aborting!\n",
+                               mdname(mddev));
                        goto out;
                }
 
@@ -123,8 +124,8 @@ static struct linear_conf *linear_conf(struct mddev *mddev, int raid_disks)
                        discard_supported = true;
        }
        if (cnt != raid_disks) {
-               printk(KERN_ERR "md/linear:%s: not enough drives present. Aborting!\n",
-                      mdname(mddev));
+               pr_warn("md/linear:%s: not enough drives present. Aborting!\n",
+                       mdname(mddev));
                goto out;
        }
 
@@ -227,22 +228,22 @@ static void linear_make_request(struct mddev *mddev, struct bio *bio)
        }
 
        do {
-               tmp_dev = which_dev(mddev, bio->bi_iter.bi_sector);
+               sector_t bio_sector = bio->bi_iter.bi_sector;
+               tmp_dev = which_dev(mddev, bio_sector);
                start_sector = tmp_dev->end_sector - tmp_dev->rdev->sectors;
                end_sector = tmp_dev->end_sector;
                data_offset = tmp_dev->rdev->data_offset;
                bio->bi_bdev = tmp_dev->rdev->bdev;
 
-               if (unlikely(bio->bi_iter.bi_sector >= end_sector ||
-                            bio->bi_iter.bi_sector < start_sector))
+               if (unlikely(bio_sector >= end_sector ||
+                            bio_sector < start_sector))
                        goto out_of_bounds;
 
                if (unlikely(bio_end_sector(bio) > end_sector)) {
                        /* This bio crosses a device boundary, so we have to
                         * split it.
                         */
-                       split = bio_split(bio, end_sector -
-                                         bio->bi_iter.bi_sector,
+                       split = bio_split(bio, end_sector - bio_sector,
                                          GFP_NOIO, fs_bio_set);
                        bio_chain(split, bio);
                } else {
@@ -256,15 +257,18 @@ static void linear_make_request(struct mddev *mddev, struct bio *bio)
                         !blk_queue_discard(bdev_get_queue(split->bi_bdev)))) {
                        /* Just ignore it */
                        bio_endio(split);
-               } else
+               } else {
+                       if (mddev->gendisk)
+                               trace_block_bio_remap(bdev_get_queue(split->bi_bdev),
+                                                     split, disk_devt(mddev->gendisk),
+                                                     bio_sector);
                        generic_make_request(split);
+               }
        } while (split != bio);
        return;
 
 out_of_bounds:
-       printk(KERN_ERR
-              "md/linear:%s: make_request: Sector %llu out of bounds on "
-              "dev %s: %llu sectors, offset %llu\n",
+       pr_err("md/linear:%s: make_request: Sector %llu out of bounds on dev %s: %llu sectors, offset %llu\n",
               mdname(mddev),
               (unsigned long long)bio->bi_iter.bi_sector,
               bdevname(tmp_dev->rdev->bdev, b),
@@ -275,7 +279,6 @@ out_of_bounds:
 
 static void linear_status (struct seq_file *seq, struct mddev *mddev)
 {
-
        seq_printf(seq, " %dk rounding", mddev->chunk_sectors / 2);
 }