Commit ebf7768e authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] md: Discard the cmd field from r1_bio structure

From: NeilBrown <neilb@cse.unsw.edu.au>

The only time it is really needed is to differentiate a retry-on-fail from a
write-after-read-for-resync request to raid1d.  So we use a bit in 'state'
for that.
parent c1dd448e
...@@ -523,9 +523,8 @@ static int make_request(request_queue_t *q, struct bio * bio) ...@@ -523,9 +523,8 @@ static int make_request(request_queue_t *q, struct bio * bio)
r1_bio->mddev = mddev; r1_bio->mddev = mddev;
r1_bio->sector = bio->bi_sector; r1_bio->sector = bio->bi_sector;
r1_bio->cmd = bio_data_dir(bio);
if (r1_bio->cmd == READ) { if (bio_data_dir(bio) == READ) {
/* /*
* read balancing logic: * read balancing logic:
*/ */
...@@ -539,7 +538,7 @@ static int make_request(request_queue_t *q, struct bio * bio) ...@@ -539,7 +538,7 @@ static int make_request(request_queue_t *q, struct bio * bio)
read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset; read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset;
read_bio->bi_bdev = mirror->rdev->bdev; read_bio->bi_bdev = mirror->rdev->bdev;
read_bio->bi_end_io = raid1_end_read_request; read_bio->bi_end_io = raid1_end_read_request;
read_bio->bi_rw = r1_bio->cmd; read_bio->bi_rw = READ;
read_bio->bi_private = r1_bio; read_bio->bi_private = r1_bio;
generic_make_request(read_bio); generic_make_request(read_bio);
...@@ -577,7 +576,7 @@ static int make_request(request_queue_t *q, struct bio * bio) ...@@ -577,7 +576,7 @@ static int make_request(request_queue_t *q, struct bio * bio)
mbio->bi_sector = r1_bio->sector + conf->mirrors[i].rdev->data_offset; mbio->bi_sector = r1_bio->sector + conf->mirrors[i].rdev->data_offset;
mbio->bi_bdev = conf->mirrors[i].rdev->bdev; mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
mbio->bi_end_io = raid1_end_write_request; mbio->bi_end_io = raid1_end_write_request;
mbio->bi_rw = r1_bio->cmd; mbio->bi_rw = WRITE;
mbio->bi_private = r1_bio; mbio->bi_private = r1_bio;
atomic_inc(&r1_bio->remaining); atomic_inc(&r1_bio->remaining);
...@@ -926,30 +925,26 @@ static void raid1d(mddev_t *mddev) ...@@ -926,30 +925,26 @@ static void raid1d(mddev_t *mddev)
mddev = r1_bio->mddev; mddev = r1_bio->mddev;
conf = mddev_to_conf(mddev); conf = mddev_to_conf(mddev);
bio = r1_bio->master_bio; bio = r1_bio->master_bio;
switch(r1_bio->cmd) { if (test_bit(R1BIO_IsSync, &r1_bio->state)) {
case SPECIAL:
sync_request_write(mddev, r1_bio); sync_request_write(mddev, r1_bio);
break; } else {
case READ:
case READA:
if (map(mddev, &rdev) == -1) { if (map(mddev, &rdev) == -1) {
printk(KERN_ALERT "raid1: %s: unrecoverable I/O" printk(KERN_ALERT "raid1: %s: unrecoverable I/O"
" read error for block %llu\n", " read error for block %llu\n",
bdevname(bio->bi_bdev,b), bdevname(bio->bi_bdev,b),
(unsigned long long)r1_bio->sector); (unsigned long long)r1_bio->sector);
raid_end_bio_io(r1_bio); raid_end_bio_io(r1_bio);
break; } else {
printk(KERN_ERR "raid1: %s: redirecting sector %llu to"
" another mirror\n",
bdevname(rdev->bdev,b),
(unsigned long long)r1_bio->sector);
bio->bi_bdev = rdev->bdev;
bio->bi_sector = r1_bio->sector + rdev->data_offset;
bio->bi_rw = READ;
generic_make_request(bio);
} }
printk(KERN_ERR "raid1: %s: redirecting sector %llu to"
" another mirror\n",
bdevname(rdev->bdev,b),
(unsigned long long)r1_bio->sector);
bio->bi_bdev = rdev->bdev;
bio->bi_sector = r1_bio->sector + rdev->data_offset;
bio->bi_rw = r1_bio->cmd;
generic_make_request(bio);
break;
} }
} }
spin_unlock_irqrestore(&retry_list_lock, flags); spin_unlock_irqrestore(&retry_list_lock, flags);
...@@ -1037,7 +1032,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster) ...@@ -1037,7 +1032,7 @@ static int sync_request(mddev_t *mddev, sector_t sector_nr, int go_faster)
r1_bio->mddev = mddev; r1_bio->mddev = mddev;
r1_bio->sector = sector_nr; r1_bio->sector = sector_nr;
r1_bio->cmd = SPECIAL; set_bit(R1BIO_IsSync, &r1_bio->state);
r1_bio->read_disk = disk; r1_bio->read_disk = disk;
bio = r1_bio->master_bio; bio = r1_bio->master_bio;
......
...@@ -54,7 +54,6 @@ struct r1bio_s { ...@@ -54,7 +54,6 @@ struct r1bio_s {
atomic_t remaining; /* 'have we finished' count, atomic_t remaining; /* 'have we finished' count,
* used from IRQ handlers * used from IRQ handlers
*/ */
int cmd;
sector_t sector; sector_t sector;
unsigned long state; unsigned long state;
mddev_t *mddev; mddev_t *mddev;
...@@ -78,6 +77,6 @@ struct r1bio_s { ...@@ -78,6 +77,6 @@ struct r1bio_s {
}; };
/* bits for r1bio.state */ /* bits for r1bio.state */
#define R1BIO_Uptodate 1 #define R1BIO_Uptodate 0
#define R1BIO_IsSync 1
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment