From: Brian Behlendorf Date: Tue, 22 Feb 2011 20:15:13 +0000 (-0800) Subject: Linux 2.6.x compat, blkdev_compat.h X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=commitdiff_plain;ds=sidebyside;h=61e909608d15dc6900a710a0ceab6e101a68ac5a;p=zfs.git Linux 2.6.x compat, blkdev_compat.h For legacy reasons the zvol.c and vdev_disk.c Linux compatibility code ended up in sys/blkdev.h and sys/vdev_disk.h headers. While there are worse places for this code to live it should be in a linux/blkdev_compat.h header. This change moves this block device Linux compatibility code in to the linux/blkdev_compat.h header and updates all the correct #include locations. This is not a functional change or bug fix, it is just code cleanup. --- diff --git a/include/sys/blkdev.h b/include/linux/blkdev_compat.h similarity index 76% rename from include/sys/blkdev.h rename to include/linux/blkdev_compat.h index 7f24220..f841c6c 100644 --- a/include/sys/blkdev.h +++ b/include/linux/blkdev_compat.h @@ -18,17 +18,16 @@ * * CDDL HEADER END */ + /* - * Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC. + * Copyright (C) 2011 Lawrence Livermore National Security, LLC. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). * Written by Brian Behlendorf . * LLNL-CODE-403049. */ -#ifndef _SYS_BLKDEV_H -#define _SYS_BLKDEV_H - -#ifdef _KERNEL +#ifndef _ZFS_BLKDEV_H +#define _ZFS_BLKDEV_H #include #include @@ -212,6 +211,10 @@ struct req_iterator { bio_for_each_segment(bvl, _iter.bio, _iter.i) #endif /* HAVE_RQ_FOR_EACH_SEGMENT */ +/* + * Portable helper for correctly setting the FAILFAST flags. The + * correct usage has changed 3 times from 2.6.12 to 2.6.38. + */ static inline void bio_set_flags_failfast(struct block_device *bdev, int *flags) { @@ -255,10 +258,66 @@ bio_set_flags_failfast(struct block_device *bdev, int *flags) #endif /* HAVE_BIO_RW_FAILFAST_DTD */ } +/* + * Maximum disk label length, it may be undefined for some kernels. + */ #ifndef DISK_NAME_LEN #define DISK_NAME_LEN 32 #endif /* DISK_NAME_LEN */ -#endif /* KERNEL */ +/* + * 2.6.24 API change, + * The bio_end_io() prototype changed slightly. These are helper + * macro's to ensure the prototype and return value are handled. + */ +#ifdef HAVE_2ARGS_BIO_END_IO_T +# define BIO_END_IO_PROTO(fn, x, y, z) static void fn(struct bio *x, int z) +# define BIO_END_IO_RETURN(rc) return +#else +# define BIO_END_IO_PROTO(fn, x, y, z) static int fn(struct bio *x, \ + unsigned int y, int z) +# define BIO_END_IO_RETURN(rc) return rc +#endif /* HAVE_2ARGS_BIO_END_IO_T */ + +/* + * 2.6.28 API change + * Used to exclusively open a block device from within the kernel. + */ +#ifdef 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 */ + +/* + * 2.6.22 API change + * The function invalidate_bdev() lost it's second argument because + * it was unused. + */ +#ifdef HAVE_1ARG_INVALIDATE_BDEV +# define vdev_bdev_invalidate(bdev) invalidate_bdev(bdev) +#else +# define vdev_bdev_invalidate(bdev) invalidate_bdev(bdev, 1) +#endif /* HAVE_1ARG_INVALIDATE_BDEV */ + +/* + * 2.6.30 API change + * Change to make it explicit there this is the logical block size. + */ +#ifdef HAVE_BDEV_LOGICAL_BLOCK_SIZE +# define vdev_bdev_block_size(bdev) bdev_logical_block_size(bdev) +#else +# define vdev_bdev_block_size(bdev) bdev_hardsect_size(bdev) +#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 + * ordering and prioritization to the ZFS IO scheduler. + */ +#define VDEV_SCHEDULER "noop" -#endif /* _SYS_BLKDEV_H */ +#endif /* _ZFS_BLKDEV_H */ diff --git a/include/sys/Makefile.am b/include/sys/Makefile.am index bde71b7..7b95d8e 100644 --- a/include/sys/Makefile.am +++ b/include/sys/Makefile.am @@ -72,7 +72,6 @@ COMMON_H = \ $(top_srcdir)/include/sys/zrlock.h KERNEL_H = \ - $(top_srcdir)/include/sys/blkdev.h \ $(top_srcdir)/include/sys/zfs_ioctl.h \ $(top_srcdir)/include/sys/zfs_onexit.h \ ${top_srcdir}/include/sys/zpl.h \ diff --git a/include/sys/Makefile.in b/include/sys/Makefile.in index 37339e2..daf68b3 100644 --- a/include/sys/Makefile.in +++ b/include/sys/Makefile.in @@ -163,7 +163,6 @@ am__kernel_HEADERS_DIST = $(top_srcdir)/include/sys/arc.h \ $(top_srcdir)/include/sys/zio.h \ $(top_srcdir)/include/sys/zio_impl.h \ $(top_srcdir)/include/sys/zrlock.h \ - $(top_srcdir)/include/sys/blkdev.h \ $(top_srcdir)/include/sys/zfs_ioctl.h \ $(top_srcdir)/include/sys/zfs_onexit.h \ ${top_srcdir}/include/sys/zpl.h \ @@ -532,7 +531,6 @@ COMMON_H = \ $(top_srcdir)/include/sys/zrlock.h KERNEL_H = \ - $(top_srcdir)/include/sys/blkdev.h \ $(top_srcdir)/include/sys/zfs_ioctl.h \ $(top_srcdir)/include/sys/zfs_onexit.h \ ${top_srcdir}/include/sys/zpl.h \ diff --git a/include/sys/dmu.h b/include/sys/dmu.h index 7040b67..20733f5 100644 --- a/include/sys/dmu.h +++ b/include/sys/dmu.h @@ -41,9 +41,6 @@ #include #include #include -#ifdef _KERNEL -#include -#endif #ifdef __cplusplus extern "C" { @@ -514,6 +511,7 @@ void dmu_write(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, void dmu_prealloc(objset_t *os, uint64_t object, uint64_t offset, uint64_t size, dmu_tx_t *tx); #ifdef _KERNEL +#include int dmu_read_req(objset_t *os, uint64_t object, struct request *req); int dmu_write_req(objset_t *os, uint64_t object, struct request *req, dmu_tx_t *tx); diff --git a/include/sys/vdev_disk.h b/include/sys/vdev_disk.h index 03e7048..daefed7 100644 --- a/include/sys/vdev_disk.h +++ b/include/sys/vdev_disk.h @@ -28,15 +28,8 @@ #ifndef _SYS_VDEV_DISK_H #define _SYS_VDEV_DISK_H -#ifdef __cplusplus -extern "C" { -#endif - #ifdef _KERNEL #include -#include -#include -#include typedef struct vdev_disk { ddi_devid_t vd_devid; @@ -48,46 +41,5 @@ extern int vdev_disk_physio(struct block_device *, caddr_t, size_t, uint64_t, int); extern int vdev_disk_read_rootlabel(char *, char *, nvlist_t **); -/* 2.6.24 API change */ -#ifdef HAVE_2ARGS_BIO_END_IO_T -# define BIO_END_IO_PROTO(fn, x, y, z) static void fn(struct bio *x, int z) -# define BIO_END_IO_RETURN(rc) return -#else -# define BIO_END_IO_PROTO(fn, x, y, z) static int fn(struct bio *x, \ - unsigned int y, int z) -# define BIO_END_IO_RETURN(rc) return rc -#endif /* HAVE_2ARGS_BIO_END_IO_T */ - -/* 2.6.28 API change */ -#ifdef 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 */ - -/* 2.6.22 API change */ -#ifdef HAVE_1ARG_INVALIDATE_BDEV -# define vdev_bdev_invalidate(bdev) invalidate_bdev(bdev) -#else -# define vdev_bdev_invalidate(bdev) invalidate_bdev(bdev, 1) -#endif /* HAVE_1ARG_INVALIDATE_BDEV */ - -/* 2.6.30 API change */ -#ifdef HAVE_BDEV_LOGICAL_BLOCK_SIZE -# define vdev_bdev_block_size(bdev) bdev_logical_block_size(bdev) -#else -# define vdev_bdev_block_size(bdev) bdev_hardsect_size(bdev) -#endif - -/* Default Linux IO Scheduler */ -#define VDEV_SCHEDULER "noop" - #endif /* _KERNEL */ - -#ifdef __cplusplus -} -#endif - -#endif /* _SYS_VDEV_DISK_H */ +#endif /* _SYS_VDEV_DISK_H */ diff --git a/include/sys/zvol.h b/include/sys/zvol.h index c8b9d65..815b186 100644 --- a/include/sys/zvol.h +++ b/include/sys/zvol.h @@ -33,8 +33,6 @@ #ifdef _KERNEL -#include - extern int zvol_check_volsize(uint64_t volsize, uint64_t blocksize); extern int zvol_check_volblocksize(uint64_t volblocksize); extern int zvol_get_stats(objset_t *os, nvlist_t *nv); diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 04c885f..e4487f9 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -44,6 +44,7 @@ #include #include #include +#include unsigned int zvol_major = ZVOL_MAJOR; unsigned int zvol_threads = 0;