mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Linux 5.18 compat: 4-argument bio_alloc()
bio_alloc(gfp_t gfp_mask, unsigned short nr_iovecs)
became
  bio_alloc(struct block_device *bdev, unsigned short nr_vecs,
            unsigned int opf, gfp_t gfp_mask)
passing NULL/0 continues previous behaviour
Upstream-commit: 07888c665b405b1cd3577ddebfeb74f4717a84c4 ("block:
 pass a block_device and opf to bio_alloc")
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #13251
			
			
This commit is contained in:
		
							parent
							
								
									a5a28723bd
								
							
						
					
					
						commit
						215a8255a9
					
				| @ -474,6 +474,41 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_CGROUP_HEADER], [ | |||||||
| 	]) | 	]) | ||||||
| ]) | ]) | ||||||
| 
 | 
 | ||||||
|  | dnl # | ||||||
|  | dnl # Linux 5.18 API | ||||||
|  | dnl # | ||||||
|  | dnl # In 07888c665b405b1cd3577ddebfeb74f4717a84c4 ("block: pass a block_device and opf to bio_alloc") | ||||||
|  | dnl #   bio_alloc(gfp_t gfp_mask, unsigned short nr_iovecs) | ||||||
|  | dnl # became | ||||||
|  | dnl #   bio_alloc(struct block_device *bdev, unsigned short nr_vecs, unsigned int opf, gfp_t gfp_mask) | ||||||
|  | dnl # however | ||||||
|  | dnl # > NULL/0 can be passed, both for the | ||||||
|  | dnl # > passthrough case on a raw request_queue and to temporarily avoid | ||||||
|  | dnl # > refactoring some nasty code. | ||||||
|  | dnl # | ||||||
|  | AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO_ALLOC_4ARG], [ | ||||||
|  | 	ZFS_LINUX_TEST_SRC([bio_alloc_4arg], [ | ||||||
|  | 		#include <linux/bio.h> | ||||||
|  | 	],[ | ||||||
|  | 		gfp_t gfp_mask = 0; | ||||||
|  | 		unsigned short nr_iovecs = 0; | ||||||
|  | 		struct block_device *bdev = NULL; | ||||||
|  | 		unsigned int opf = 0; | ||||||
|  | 
 | ||||||
|  | 		struct bio *__attribute__((unused)) allocated = bio_alloc(bdev, nr_iovecs, opf, gfp_mask); | ||||||
|  | 	]) | ||||||
|  | ]) | ||||||
|  | 
 | ||||||
|  | AC_DEFUN([ZFS_AC_KERNEL_BIO_ALLOC_4ARG], [ | ||||||
|  | 	AC_MSG_CHECKING([for 4-argument bio_alloc()]) | ||||||
|  | 	ZFS_LINUX_TEST_RESULT([bio_alloc_4arg],[ | ||||||
|  | 		AC_MSG_RESULT(yes) | ||||||
|  | 		AC_DEFINE([HAVE_BIO_ALLOC_4ARG], 1, [bio_alloc() takes 4 arguments]) | ||||||
|  | 	],[ | ||||||
|  | 		AC_MSG_RESULT(no) | ||||||
|  | 	]) | ||||||
|  | ]) | ||||||
|  | 
 | ||||||
| AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [ | AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [ | ||||||
| 	ZFS_AC_KERNEL_SRC_REQ | 	ZFS_AC_KERNEL_SRC_REQ | ||||||
| 	ZFS_AC_KERNEL_SRC_BIO_OPS | 	ZFS_AC_KERNEL_SRC_BIO_OPS | ||||||
| @ -488,6 +523,7 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BIO], [ | |||||||
| 	ZFS_AC_KERNEL_SRC_BDEV_SUBMIT_BIO_RETURNS_VOID | 	ZFS_AC_KERNEL_SRC_BDEV_SUBMIT_BIO_RETURNS_VOID | ||||||
| 	ZFS_AC_KERNEL_SRC_BIO_SET_DEV_MACRO | 	ZFS_AC_KERNEL_SRC_BIO_SET_DEV_MACRO | ||||||
| 	ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER | 	ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER | ||||||
|  | 	ZFS_AC_KERNEL_SRC_BIO_ALLOC_4ARG | ||||||
| ]) | ]) | ||||||
| 
 | 
 | ||||||
| AC_DEFUN([ZFS_AC_KERNEL_BIO], [ | AC_DEFUN([ZFS_AC_KERNEL_BIO], [ | ||||||
| @ -512,4 +548,5 @@ AC_DEFUN([ZFS_AC_KERNEL_BIO], [ | |||||||
| 	ZFS_AC_KERNEL_BIO_BDEV_DISK | 	ZFS_AC_KERNEL_BIO_BDEV_DISK | ||||||
| 	ZFS_AC_KERNEL_BDEV_SUBMIT_BIO_RETURNS_VOID | 	ZFS_AC_KERNEL_BDEV_SUBMIT_BIO_RETURNS_VOID | ||||||
| 	ZFS_AC_KERNEL_BLK_CGROUP_HEADER | 	ZFS_AC_KERNEL_BLK_CGROUP_HEADER | ||||||
|  | 	ZFS_AC_KERNEL_BIO_ALLOC_4ARG | ||||||
| ]) | ]) | ||||||
|  | |||||||
| @ -563,6 +563,10 @@ vdev_submit_bio(struct bio *bio) | |||||||
| 	current->bio_list = bio_list; | 	current->bio_list = bio_list; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifdef HAVE_BIO_ALLOC_4ARG | ||||||
|  | #define	bio_alloc(gfp_mask, nr_iovecs) bio_alloc(NULL, nr_iovecs, 0, gfp_mask) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| static int | static int | ||||||
| __vdev_disk_physio(struct block_device *bdev, zio_t *zio, | __vdev_disk_physio(struct block_device *bdev, zio_t *zio, | ||||||
|     size_t io_size, uint64_t io_offset, int rw, int flags) |     size_t io_size, uint64_t io_offset, int rw, int flags) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 наб
						наб