On Wed, Dec 12, 2007 at 08:54:07AM -0700, Matthew Wilcox wrote: > On Wed, Dec 12, 2007 at 08:18:14AM -0700, Matthew Wilcox wrote: > > I don't know whether BIO_RW_BARRIER is __REQ_SOFTBARRIER or > > __REQ_HARDBARRIER, so I didn't include that in this patch. There also > > doesn't seem to be a __REQ equivalent to BIO_RW_AHEAD, but we can do > > the other four bits (and leave gaps for those two). > > Hm. BIO_RW_AHEAD seems unused: > > willy@honeydew:~/kernel/linux-2.6$ grep -r BIO_RW_AHEAD * > block/blktrace.c: (((rw) & (1 << BIO_RW_AHEAD)) << (2 - BIO_RW_AHEAD)) > include/linux/bio.h:#define BIO_RW_AHEAD 1 > include/linux/bio.h:#define bio_rw_ahead(bio) ((bio)->bi_rw & (1 << BIO_RW_AHEAD)) > willy@honeydew:~/kernel/linux-2.6$ grep -r bio_rw_ahead * > block/ll_rw_blk.c: if (bio_rw_ahead(bio) || bio_failfast(bio)) > drivers/md/dm-mpath.c: if ((error == -EWOULDBLOCK) && bio_rw_ahead(bio)) > drivers/md/multipath.c: else if (!bio_rw_ahead(bio)) { > include/linux/bio.h:#define bio_rw_ahead(bio) ((bio)->bi_rw & (1 << BIO_RW_AHEAD)) That would say to me that READA is not hooked up correctly. i.e: #define READ 0 #define WRITE 1 #define READA 2 /* read-ahead - don't block if no resources */ #define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ #define READ_SYNC (READ | (1 << BIO_RW_SYNC)) #define READ_META (READ | (1 << BIO_RW_META)) #define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNC)) #define WRITE_BARRIER ((1 << BIO_RW) | (1 << BIO_RW_BARRIER)) i.e. it should be: #define READA (1 << BIO_RW_AHEAD) Right? FWIW, dm does this: if (bio_rw(bio) != READA) Which really should be if (bio_rw_ahead(bio))..... Cheers, Dave. -- Dave Chinner Principal Engineer SGI Australian Software Group - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html