X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=include%2Flinux%2Fblkdev_compat.h;h=0a7c985d8ad58fcdf5598a5b2d9ee2506e32c287;hb=b40a77aefca3d0832396edd35f597100d152f163;hp=f841c6c00c51dcae32ab0ef2bb40db304834c644;hpb=61e909608d15dc6900a710a0ceab6e101a68ac5a;p=zfs.git diff --git a/include/linux/blkdev_compat.h b/include/linux/blkdev_compat.h index f841c6c..0a7c985 100644 --- a/include/linux/blkdev_compat.h +++ b/include/linux/blkdev_compat.h @@ -172,6 +172,17 @@ __blk_rq_bytes(struct request *req) #define blk_fs_request(rq) ((rq)->cmd_type == REQ_TYPE_FS) #endif +/* + * 2.6.27 API change, + * The blk_queue_stackable() queue flag was added in 2.6.27 to handle dm + * stacking drivers. Prior to this request stacking drivers were detected + * by checking (q->request_fn == NULL), for earlier kernels we revert to + * this legacy behavior. + */ +#ifndef blk_queue_stackable +#define blk_queue_stackable(q) ((q)->request_fn == NULL) +#endif + #ifndef HAVE_GET_DISK_RO static inline int get_disk_ro(struct gendisk *disk) @@ -280,16 +291,31 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags) #endif /* HAVE_2ARGS_BIO_END_IO_T */ /* - * 2.6.28 API change + * 2.6.38 - 2.6.x API, + * blkdev_get_by_path() + * blkdev_put() + * + * 2.6.28 - 2.6.37 API, + * open_bdev_exclusive() + * close_bdev_exclusive() + * + * 2.6.12 - 2.6.27 API, + * open_bdev_excl() + * close_bdev_excl() + * * Used to exclusively open a block device from within the kernel. */ -#ifdef HAVE_OPEN_BDEV_EXCLUSIVE +#if defined(HAVE_BLKDEV_GET_BY_PATH) +# define vdev_bdev_open(path, md, hld) blkdev_get_by_path(path, \ + (md) | FMODE_EXCL, hld) +# define vdev_bdev_close(bdev, md) blkdev_put(bdev, (md) | FMODE_EXCL) +#elif defined(HAVE_OPEN_BDEV_EXCLUSIVE) # define vdev_bdev_open(path, md, hld) open_bdev_exclusive(path, md, hld) # define vdev_bdev_close(bdev, md) close_bdev_exclusive(bdev, md) #else # define vdev_bdev_open(path, md, hld) open_bdev_excl(path, md, hld) # define vdev_bdev_close(bdev, md) close_bdev_excl(bdev) -#endif /* HAVE_OPEN_BDEV_EXCLUSIVE */ +#endif /* HAVE_BLKDEV_GET_BY_PATH | HAVE_OPEN_BDEV_EXCLUSIVE */ /* * 2.6.22 API change @@ -313,6 +339,20 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags) #endif /* + * 2.6.37 API change + * The WRITE_FLUSH, WRITE_FUA, and WRITE_FLUSH_FUA flags have been + * introduced as a replacement for WRITE_BARRIER. This was done to + * allow richer semantics to be expressed to the block layer. It is + * the block layers responsibility to choose the correct way to + * implement these semantics. + */ +#ifdef WRITE_FLUSH_FUA +# define VDEV_WRITE_FLUSH_FUA WRITE_FLUSH_FUA +#else +# define VDEV_WRITE_FLUSH_FUA WRITE_BARRIER +#endif + +/* * Default Linux IO Scheduler, * Setting the scheduler to noop will allow the Linux IO scheduler to * still perform front and back merging, while leaving the request