aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/linear.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/linear.c')
-rw-r--r--drivers/md/linear.c36
1 files changed, 16 insertions, 20 deletions
diff --git a/drivers/md/linear.c b/drivers/md/linear.c
index 09437e958235..7e0e057db9a7 100644
--- a/drivers/md/linear.c
+++ b/drivers/md/linear.c
@@ -159,7 +159,8 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
159 sector_t sectors; 159 sector_t sectors;
160 160
161 if (j < 0 || j >= raid_disks || disk->rdev) { 161 if (j < 0 || j >= raid_disks || disk->rdev) {
162 printk("linear: disk numbering problem. Aborting!\n"); 162 printk(KERN_ERR "md/linear:%s: disk numbering problem. Aborting!\n",
163 mdname(mddev));
163 goto out; 164 goto out;
164 } 165 }
165 166
@@ -187,7 +188,8 @@ static linear_conf_t *linear_conf(mddev_t *mddev, int raid_disks)
187 188
188 } 189 }
189 if (cnt != raid_disks) { 190 if (cnt != raid_disks) {
190 printk("linear: not enough drives present. Aborting!\n"); 191 printk(KERN_ERR "md/linear:%s: not enough drives present. Aborting!\n",
192 mdname(mddev));
191 goto out; 193 goto out;
192 } 194 }
193 195
@@ -282,29 +284,21 @@ static int linear_stop (mddev_t *mddev)
282 rcu_barrier(); 284 rcu_barrier();
283 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/ 285 blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/
284 kfree(conf); 286 kfree(conf);
287 mddev->private = NULL;
285 288
286 return 0; 289 return 0;
287} 290}
288 291
289static int linear_make_request (struct request_queue *q, struct bio *bio) 292static int linear_make_request (mddev_t *mddev, struct bio *bio)
290{ 293{
291 const int rw = bio_data_dir(bio);
292 mddev_t *mddev = q->queuedata;
293 dev_info_t *tmp_dev; 294 dev_info_t *tmp_dev;
294 sector_t start_sector; 295 sector_t start_sector;
295 int cpu;
296 296
297 if (unlikely(bio_rw_flagged(bio, BIO_RW_BARRIER))) { 297 if (unlikely(bio_rw_flagged(bio, BIO_RW_BARRIER))) {
298 md_barrier_request(mddev, bio); 298 md_barrier_request(mddev, bio);
299 return 0; 299 return 0;
300 } 300 }
301 301
302 cpu = part_stat_lock();
303 part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]);
304 part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw],
305 bio_sectors(bio));
306 part_stat_unlock();
307
308 rcu_read_lock(); 302 rcu_read_lock();
309 tmp_dev = which_dev(mddev, bio->bi_sector); 303 tmp_dev = which_dev(mddev, bio->bi_sector);
310 start_sector = tmp_dev->end_sector - tmp_dev->rdev->sectors; 304 start_sector = tmp_dev->end_sector - tmp_dev->rdev->sectors;
@@ -314,12 +308,14 @@ static int linear_make_request (struct request_queue *q, struct bio *bio)
314 || (bio->bi_sector < start_sector))) { 308 || (bio->bi_sector < start_sector))) {
315 char b[BDEVNAME_SIZE]; 309 char b[BDEVNAME_SIZE];
316 310
317 printk("linear_make_request: Sector %llu out of bounds on " 311 printk(KERN_ERR
318 "dev %s: %llu sectors, offset %llu\n", 312 "md/linear:%s: make_request: Sector %llu out of bounds on "
319 (unsigned long long)bio->bi_sector, 313 "dev %s: %llu sectors, offset %llu\n",
320 bdevname(tmp_dev->rdev->bdev, b), 314 mdname(mddev),
321 (unsigned long long)tmp_dev->rdev->sectors, 315 (unsigned long long)bio->bi_sector,
322 (unsigned long long)start_sector); 316 bdevname(tmp_dev->rdev->bdev, b),
317 (unsigned long long)tmp_dev->rdev->sectors,
318 (unsigned long long)start_sector);
323 rcu_read_unlock(); 319 rcu_read_unlock();
324 bio_io_error(bio); 320 bio_io_error(bio);
325 return 0; 321 return 0;
@@ -336,9 +332,9 @@ static int linear_make_request (struct request_queue *q, struct bio *bio)
336 332
337 bp = bio_split(bio, end_sector - bio->bi_sector); 333 bp = bio_split(bio, end_sector - bio->bi_sector);
338 334
339 if (linear_make_request(q, &bp->bio1)) 335 if (linear_make_request(mddev, &bp->bio1))
340 generic_make_request(&bp->bio1); 336 generic_make_request(&bp->bio1);
341 if (linear_make_request(q, &bp->bio2)) 337 if (linear_make_request(mddev, &bp->bio2))
342 generic_make_request(&bp->bio2); 338 generic_make_request(&bp->bio2);
343 bio_pair_release(bp); 339 bio_pair_release(bp);
344 return 0; 340 return 0;