diff -urNp ./drivers/md/raid10.c.orig ./drivers/md/raid10.c --- ./drivers/md/raid10.c.orig 2010-07-07 19:24:12.000000000 +0800 +++ ./drivers/md/raid10.c 2010-07-08 08:35:19.000000000 +0800 @@ -799,7 +799,7 @@ static int make_request(mddev_t *mddev, int i; int chunk_sects = conf->chunk_mask + 1; const int rw = bio_data_dir(bio); - const bool do_sync = (bio->bi_rw & REQ_SYNC); + const bool do_sync = bio_rw_flagged(bio, REQ_SYNC); struct bio_list bl; unsigned long flags; mdk_rdev_t *blocked_rdev; @@ -879,7 +879,7 @@ static int make_request(mddev_t *mddev, mirror->rdev->data_offset; read_bio->bi_bdev = mirror->rdev->bdev; read_bio->bi_end_io = raid10_end_read_request; - read_bio->bi_rw = READ | do_sync; + read_bio->bi_rw = READ | (do_sync << __REQ_SYNC); read_bio->bi_private = r10_bio; generic_make_request(read_bio); @@ -947,7 +947,7 @@ static int make_request(mddev_t *mddev, conf->mirrors[d].rdev->data_offset; mbio->bi_bdev = conf->mirrors[d].rdev->bdev; mbio->bi_end_io = raid10_end_write_request; - mbio->bi_rw = WRITE | do_sync; + mbio->bi_rw = WRITE | (do_sync << __REQ_SYNC); mbio->bi_private = r10_bio; atomic_inc(&r10_bio->remaining); @@ -1716,7 +1716,7 @@ static void raid10d(mddev_t *mddev) raid_end_bio_io(r10_bio); bio_put(bio); } else { - const bool do_sync = (r10_bio->master_bio->bi_rw & REQ_SYNC); + const bool do_sync = bio_rw_flagged(r10_bio->master_bio, REQ_SYNC); bio_put(bio); rdev = conf->mirrors[mirror].rdev; if (printk_ratelimit()) @@ -1730,7 +1730,7 @@ static void raid10d(mddev_t *mddev) bio->bi_sector = r10_bio->devs[r10_bio->read_slot].addr + rdev->data_offset; bio->bi_bdev = rdev->bdev; - bio->bi_rw = READ | do_sync; + bio->bi_rw = READ | (do_sync << __REQ_SYNC); bio->bi_private = r10_bio; bio->bi_end_io = raid10_end_read_request; unplug = 1; diff -urNp ./drivers/md/raid1.c.orig ./drivers/md/raid1.c --- ./drivers/md/raid1.c.orig 2010-07-07 19:21:45.000000000 +0800 +++ ./drivers/md/raid1.c 2010-07-08 08:37:08.000000000 +0800 @@ -787,7 +787,7 @@ static int make_request(mddev_t *mddev, struct bio_list bl; struct page **behind_pages = NULL; const int rw = bio_data_dir(bio); - const bool do_sync = (bio->bi_rw & REQ_SYNC); + const bool do_sync = bio_rw_flagged(bio, REQ_SYNC); bool do_barriers; mdk_rdev_t *blocked_rdev; @@ -877,7 +877,7 @@ static int make_request(mddev_t *mddev, read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset; read_bio->bi_bdev = mirror->rdev->bdev; read_bio->bi_end_io = raid1_end_read_request; - read_bio->bi_rw = READ | do_sync; + read_bio->bi_rw = READ | (do_sync << __REQ_SYNC); read_bio->bi_private = r1_bio; generic_make_request(read_bio); @@ -959,7 +959,7 @@ static int make_request(mddev_t *mddev, atomic_set(&r1_bio->remaining, 0); atomic_set(&r1_bio->behind_remaining, 0); - do_barriers = bio->bi_rw & REQ_HARDBARRIER; + do_barriers = bio_rw_flagged(bio, REQ_HARDBARRIER); if (do_barriers) set_bit(R1BIO_Barrier, &r1_bio->state); @@ -975,7 +975,7 @@ static int make_request(mddev_t *mddev, mbio->bi_sector = r1_bio->sector + conf->mirrors[i].rdev->data_offset; mbio->bi_bdev = conf->mirrors[i].rdev->bdev; mbio->bi_end_io = raid1_end_write_request; - mbio->bi_rw = WRITE | do_barriers | do_sync; + mbio->bi_rw = WRITE | (do_barriers << __REQ_HARDBARRIER) | (do_sync << __REQ_SYNC); mbio->bi_private = r1_bio; if (behind_pages) { @@ -1640,7 +1640,7 @@ static void raid1d(mddev_t *mddev) * We already have a nr_pending reference on these rdevs. */ int i; - const bool do_sync = (r1_bio->master_bio->bi_rw & REQ_SYNC); + const bool do_sync = bio_rw_flagged(r1_bio->master_bio, REQ_SYNC); clear_bit(R1BIO_BarrierRetry, &r1_bio->state); clear_bit(R1BIO_Barrier, &r1_bio->state); for (i=0; i < conf->raid_disks; i++) @@ -1661,7 +1661,7 @@ static void raid1d(mddev_t *mddev) conf->mirrors[i].rdev->data_offset; bio->bi_bdev = conf->mirrors[i].rdev->bdev; bio->bi_end_io = raid1_end_write_request; - bio->bi_rw = WRITE | do_sync; + bio->bi_rw = WRITE | (do_sync << __REQ_SYNC); bio->bi_private = r1_bio; r1_bio->bios[i] = bio; generic_make_request(bio); @@ -1696,7 +1696,7 @@ static void raid1d(mddev_t *mddev) (unsigned long long)r1_bio->sector); raid_end_bio_io(r1_bio); } else { - const bool do_sync = r1_bio->master_bio->bi_rw & REQ_SYNC; + const bool do_sync = bio_rw_flagged(r1_bio->master_bio, REQ_SYNC); r1_bio->bios[r1_bio->read_disk] = mddev->ro ? IO_BLOCKED : NULL; r1_bio->read_disk = disk; @@ -1713,7 +1713,7 @@ static void raid1d(mddev_t *mddev) bio->bi_sector = r1_bio->sector + rdev->data_offset; bio->bi_bdev = rdev->bdev; bio->bi_end_io = raid1_end_read_request; - bio->bi_rw = READ | do_sync; + bio->bi_rw = READ | (do_sync << __REQ_SYNC); bio->bi_private = r1_bio; unplug = 1; generic_make_request(bio); diff -urNp ./drivers/block/loop.c.orig ./drivers/block/loop.c --- ./drivers/block/loop.c.orig 2010-07-07 19:21:12.000000000 +0800 +++ ./drivers/block/loop.c 2010-07-08 08:38:06.000000000 +0800 @@ -476,7 +476,7 @@ static int do_bio_filebacked(struct loop pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset; if (bio_rw(bio) == WRITE) { - bool barrier = (bio->bi_rw & REQ_HARDBARRIER); + bool barrier = bio_rw_flagged(bio, REQ_HARDBARRIER); struct file *file = lo->lo_backing_file; if (barrier) { diff -urNp ./block/blk-core.c.orig ./block/blk-core.c --- ./block/blk-core.c.orig 2010-07-07 19:14:55.000000000 +0800 +++ ./block/blk-core.c 2010-07-08 08:39:10.000000000 +0800 @@ -174,7 +174,7 @@ void blk_dump_rq_flags(struct request *r { int bit; - printk(KERN_INFO "%s: dev %s: type=%x, flags=%x\n", msg, + printk(KERN_INFO "%s: dev %s: type=%x, flags=%lx\n", msg, rq->rq_disk ? rq->rq_disk->disk_name : "?", rq->cmd_type, rq->cmd_flags); @@ -1198,9 +1198,9 @@ static int __make_request(struct request int el_ret; unsigned int bytes = bio->bi_size; const unsigned short prio = bio_prio(bio); - const bool sync = (bio->bi_rw & REQ_SYNC); - const bool unplug = (bio->bi_rw & REQ_UNPLUG); - const unsigned int ff = bio->bi_rw & REQ_FAILFAST_MASK; + const bool sync = bio_rw_flagged(bio, REQ_SYNC); + const bool unplug = bio_rw_flagged(bio, REQ_UNPLUG); + const unsigned long ff = bio->bi_rw & REQ_FAILFAST_MASK; int rw_flags; if ((bio->bi_rw & REQ_HARDBARRIER) && @@ -1719,7 +1719,7 @@ EXPORT_SYMBOL_GPL(blk_insert_cloned_requ */ unsigned int blk_rq_err_bytes(const struct request *rq) { - unsigned int ff = rq->cmd_flags & REQ_FAILFAST_MASK; + unsigned long ff = rq->cmd_flags & REQ_FAILFAST_MASK; unsigned int bytes = 0; struct bio *bio; diff -urNp ./include/linux/blkdev.h.orig ./include/linux/blkdev.h --- ./include/linux/blkdev.h.orig 2010-07-08 07:54:51.000000000 +0800 +++ ./include/linux/blkdev.h 2010-07-08 07:55:30.000000000 +0800 @@ -97,7 +97,7 @@ struct request { struct request_queue *q; - unsigned int cmd_flags; + unsigned long cmd_flags; enum rq_cmd_type_bits cmd_type; unsigned long atomic_flags; diff -urNp ./include/linux/bio.h.orig ./include/linux/bio.h --- ./include/linux/bio.h.orig 2010-07-08 08:32:53.000000000 +0800 +++ ./include/linux/bio.h 2010-07-08 08:32:17.000000000 +0800 @@ -218,6 +218,11 @@ enum rq_flag_bits { #define REQ_IO_STAT (1 << __REQ_IO_STAT) #define REQ_MIXED_MERGE (1 << __REQ_MIXED_MERGE) +static inline bool bio_rw_flagged(struct bio *bio, unsigned long flag) +{ + return (bio->bi_rw & flag) != 0; +} + /* * upper 16 bits of bi_rw define the io priority of this bio */