diff options
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index c5a1b0725c9f..117663d2a4e5 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -214,8 +214,11 @@ static DEFINE_SPINLOCK(all_mddevs_lock); | |||
214 | */ | 214 | */ |
215 | static int md_make_request(struct request_queue *q, struct bio *bio) | 215 | static int md_make_request(struct request_queue *q, struct bio *bio) |
216 | { | 216 | { |
217 | const int rw = bio_data_dir(bio); | ||
217 | mddev_t *mddev = q->queuedata; | 218 | mddev_t *mddev = q->queuedata; |
218 | int rv; | 219 | int rv; |
220 | int cpu; | ||
221 | |||
219 | if (mddev == NULL || mddev->pers == NULL) { | 222 | if (mddev == NULL || mddev->pers == NULL) { |
220 | bio_io_error(bio); | 223 | bio_io_error(bio); |
221 | return 0; | 224 | return 0; |
@@ -236,7 +239,15 @@ static int md_make_request(struct request_queue *q, struct bio *bio) | |||
236 | } | 239 | } |
237 | atomic_inc(&mddev->active_io); | 240 | atomic_inc(&mddev->active_io); |
238 | rcu_read_unlock(); | 241 | rcu_read_unlock(); |
242 | |||
239 | rv = mddev->pers->make_request(q, bio); | 243 | rv = mddev->pers->make_request(q, bio); |
244 | |||
245 | cpu = part_stat_lock(); | ||
246 | part_stat_inc(cpu, &mddev->gendisk->part0, ios[rw]); | ||
247 | part_stat_add(cpu, &mddev->gendisk->part0, sectors[rw], | ||
248 | bio_sectors(bio)); | ||
249 | part_stat_unlock(); | ||
250 | |||
240 | if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended) | 251 | if (atomic_dec_and_test(&mddev->active_io) && mddev->suspended) |
241 | wake_up(&mddev->sb_wait); | 252 | wake_up(&mddev->sb_wait); |
242 | 253 | ||