diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/blkdev.h | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/include/sys/blkdev.h b/include/sys/blkdev.h index 7102890f1..3dc0fd2a8 100644 --- a/include/sys/blkdev.h +++ b/include/sys/blkdev.h @@ -205,17 +205,16 @@ struct req_iterator { static inline void bio_set_flags_failfast(struct block_device *bdev, int *flags) { -#ifdef HAVE_BIO_RW_FAILFAST +#ifdef CONFIG_BUG /* - * Disable BIO_RW_FAILFAST_* for loopback devices because of - * the following incorrect BUG_ON() in loop_make_request(). + * Disable FAILFAST for loopback devices because of the + * following incorrect BUG_ON() in loop_make_request(). * This support is also disabled for md devices because the * test suite layers md devices on top of loopback devices. * This may be removed when the loopback driver is fixed. * * BUG_ON(!lo || (rw != READ && rw != WRITE)); */ -#ifdef CONFIG_BUG if ((MAJOR(bdev->bd_dev) == LOOP_MAJOR) || (MAJOR(bdev->bd_dev) == MD_MAJOR)) return; @@ -225,13 +224,25 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags) return; #endif /* BLOCK_EXT_MAJOR */ #endif /* CONFIG_BUG */ + +#ifdef HAVE_BIO_RW_FAILFAST_DTD + /* BIO_RW_FAILFAST_* preferred interface from 2.6.28 - 2.6.35 */ *flags |= ((1 << BIO_RW_FAILFAST_DEV) | (1 << BIO_RW_FAILFAST_TRANSPORT) | (1 << BIO_RW_FAILFAST_DRIVER)); -#else /* !HAVE_BIO_RW_FAILFAST */ +#else +# ifdef HAVE_BIO_RW_FAILFAST + /* BIO_RW_FAILFAST preferred interface from 2.6.12 - 2.6.27 */ *flags |= (1 << BIO_RW_FAILFAST); -#endif /* HAVE_BIO_RW_FAILFAST */ +# else +# ifdef HAVE_REQ_FAILFAST_MASK + /* REQ_FAILFAST_* preferred interface from 2.6.36 - 2.6.xx, + * the BIO_* and REQ_* flags were unified under REQ_* flags. */ + *flags |= REQ_FAILFAST_MASK; +# endif /* HAVE_REQ_FAILFAST_MASK */ +# endif /* HAVE_BIO_RW_FAILFAST */ +#endif /* HAVE_BIO_RW_FAILFAST_DTD */ } #ifndef DISK_NAME_LEN |