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], [ | ||||
| 	ZFS_AC_KERNEL_SRC_REQ | ||||
| 	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_BIO_SET_DEV_MACRO | ||||
| 	ZFS_AC_KERNEL_SRC_BLK_CGROUP_HEADER | ||||
| 	ZFS_AC_KERNEL_SRC_BIO_ALLOC_4ARG | ||||
| ]) | ||||
| 
 | ||||
| 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_BDEV_SUBMIT_BIO_RETURNS_VOID | ||||
| 	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; | ||||
| } | ||||
| 
 | ||||
| #ifdef HAVE_BIO_ALLOC_4ARG | ||||
| #define	bio_alloc(gfp_mask, nr_iovecs) bio_alloc(NULL, nr_iovecs, 0, gfp_mask) | ||||
| #endif | ||||
| 
 | ||||
| static int | ||||
| __vdev_disk_physio(struct block_device *bdev, zio_t *zio, | ||||
|     size_t io_size, uint64_t io_offset, int rw, int flags) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 наб
						наб