diff options
Diffstat (limited to 'drivers/md/linear.c')
-rw-r--r-- | drivers/md/linear.c | 36 |
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 | ||
289 | static int linear_make_request (struct request_queue *q, struct bio *bio) | 292 | static 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; |