mirror of
				https://git.proxmox.com/git/mirror_zfs
				synced 2025-10-31 05:50:49 +00:00 
			
		
		
		
	 ae0b1f66c7
			
		
	
	
		ae0b1f66c7
		
			
		
	
	
	
	
		
			
			Linux 6.3+, and backports from it (6.2.8+), changed the
signatures on bdev_io_{start,end}_acct.  Add a case for it.  
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
Closes #14658
Closes #14668
		
	
			
		
			
				
	
	
		
			164 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| dnl #
 | |
| dnl # Check for generic io accounting interface.
 | |
| dnl #
 | |
| AC_DEFUN([ZFS_AC_KERNEL_SRC_GENERIC_IO_ACCT], [
 | |
| 	ZFS_LINUX_TEST_SRC([bdev_io_acct_63], [
 | |
| 		#include <linux/blkdev.h>
 | |
| 	], [
 | |
| 		struct block_device *bdev = NULL;
 | |
| 		struct bio *bio = NULL;
 | |
| 		unsigned long passed_time = 0;
 | |
| 		unsigned long start_time;
 | |
| 
 | |
| 		start_time = bdev_start_io_acct(bdev, bio_op(bio),
 | |
| 		    passed_time);
 | |
| 		bdev_end_io_acct(bdev, bio_op(bio), bio_sectors(bio), start_time);
 | |
| 	])
 | |
| 
 | |
| 	ZFS_LINUX_TEST_SRC([bdev_io_acct_old], [
 | |
| 		#include <linux/blkdev.h>
 | |
| 	], [
 | |
| 		struct block_device *bdev = NULL;
 | |
| 		struct bio *bio = NULL;
 | |
| 		unsigned long passed_time = 0;
 | |
| 		unsigned long start_time;
 | |
| 
 | |
| 		start_time = bdev_start_io_acct(bdev, bio_sectors(bio),
 | |
| 		    bio_op(bio), passed_time);
 | |
| 		bdev_end_io_acct(bdev, bio_op(bio), start_time);
 | |
| 	])
 | |
| 
 | |
| 	ZFS_LINUX_TEST_SRC([disk_io_acct], [
 | |
| 		#include <linux/blkdev.h>
 | |
| 	], [
 | |
| 		struct gendisk *disk = NULL;
 | |
| 		struct bio *bio = NULL;
 | |
| 		unsigned long start_time;
 | |
| 
 | |
| 		start_time = disk_start_io_acct(disk, bio_sectors(bio), bio_op(bio));
 | |
| 		disk_end_io_acct(disk, bio_op(bio), start_time);
 | |
| 	])
 | |
| 
 | |
| 	ZFS_LINUX_TEST_SRC([bio_io_acct], [
 | |
| 		#include <linux/blkdev.h>
 | |
| 	], [
 | |
| 		struct bio *bio = NULL;
 | |
| 		unsigned long start_time;
 | |
| 
 | |
| 		start_time = bio_start_io_acct(bio);
 | |
| 		bio_end_io_acct(bio, start_time);
 | |
| 	])
 | |
| 
 | |
| 	ZFS_LINUX_TEST_SRC([generic_acct_3args], [
 | |
| 		#include <linux/bio.h>
 | |
| 
 | |
| 		void (*generic_start_io_acct_f)(int, unsigned long,
 | |
| 		    struct hd_struct *) = &generic_start_io_acct;
 | |
| 		void (*generic_end_io_acct_f)(int, struct hd_struct *,
 | |
| 		    unsigned long) = &generic_end_io_acct;
 | |
| 	], [
 | |
| 		generic_start_io_acct(0, 0, NULL);
 | |
| 		generic_end_io_acct(0, NULL, 0);
 | |
| 	])
 | |
| 
 | |
| 	ZFS_LINUX_TEST_SRC([generic_acct_4args], [
 | |
| 		#include <linux/bio.h>
 | |
| 
 | |
| 		void (*generic_start_io_acct_f)(struct request_queue *, int,
 | |
| 		    unsigned long, struct hd_struct *) = &generic_start_io_acct;
 | |
| 		void (*generic_end_io_acct_f)(struct request_queue *, int,
 | |
| 		    struct hd_struct *, unsigned long) = &generic_end_io_acct;
 | |
| 	], [
 | |
| 		generic_start_io_acct(NULL, 0, 0, NULL);
 | |
| 		generic_end_io_acct(NULL, 0, NULL, 0);
 | |
| 	])
 | |
| ])
 | |
| 
 | |
| AC_DEFUN([ZFS_AC_KERNEL_GENERIC_IO_ACCT], [
 | |
| 	dnl #
 | |
| 	dnl # Linux 6.3, and then backports thereof, changed
 | |
| 	dnl # the signatures on bdev_start_io_acct/bdev_end_io_acct
 | |
| 	dnl #
 | |
| 	AC_MSG_CHECKING([whether 6.3+ bdev_*_io_acct() are available])
 | |
| 	ZFS_LINUX_TEST_RESULT([bdev_io_acct_63], [
 | |
| 		AC_MSG_RESULT(yes)
 | |
| 		AC_DEFINE(HAVE_BDEV_IO_ACCT_63, 1, [bdev_*_io_acct() available])
 | |
| 	], [
 | |
| 		AC_MSG_RESULT(no)
 | |
| 
 | |
| 		dnl #
 | |
| 		dnl # 5.19 API,
 | |
| 		dnl #
 | |
| 		dnl # disk_start_io_acct() and disk_end_io_acct() have been replaced by
 | |
| 		dnl # bdev_start_io_acct() and bdev_end_io_acct().
 | |
| 		dnl #
 | |
| 		AC_MSG_CHECKING([whether pre-6.3 bdev_*_io_acct() are available])
 | |
| 		ZFS_LINUX_TEST_RESULT([bdev_io_acct_old], [
 | |
| 			AC_MSG_RESULT(yes)
 | |
| 			AC_DEFINE(HAVE_BDEV_IO_ACCT_OLD, 1, [bdev_*_io_acct() available])
 | |
| 		], [
 | |
| 			AC_MSG_RESULT(no)
 | |
| 			dnl #
 | |
| 			dnl # 5.12 API,
 | |
| 			dnl #
 | |
| 			dnl # bio_start_io_acct() and bio_end_io_acct() became GPL-exported
 | |
| 			dnl # so use disk_start_io_acct() and disk_end_io_acct() instead
 | |
| 			dnl #
 | |
| 			AC_MSG_CHECKING([whether generic disk_*_io_acct() are available])
 | |
| 			ZFS_LINUX_TEST_RESULT([disk_io_acct], [
 | |
| 				AC_MSG_RESULT(yes)
 | |
| 				AC_DEFINE(HAVE_DISK_IO_ACCT, 1, [disk_*_io_acct() available])
 | |
| 			], [
 | |
| 				AC_MSG_RESULT(no)
 | |
| 
 | |
| 				dnl #
 | |
| 				dnl # 5.7 API,
 | |
| 				dnl #
 | |
| 				dnl # Added bio_start_io_acct() and bio_end_io_acct() helpers.
 | |
| 				dnl #
 | |
| 				AC_MSG_CHECKING([whether generic bio_*_io_acct() are available])
 | |
| 				ZFS_LINUX_TEST_RESULT([bio_io_acct], [
 | |
| 					AC_MSG_RESULT(yes)
 | |
| 					AC_DEFINE(HAVE_BIO_IO_ACCT, 1, [bio_*_io_acct() available])
 | |
| 				], [
 | |
| 					AC_MSG_RESULT(no)
 | |
| 
 | |
| 					dnl #
 | |
| 					dnl # 4.14 API,
 | |
| 					dnl #
 | |
| 					dnl # generic_start_io_acct/generic_end_io_acct now require
 | |
| 					dnl # request_queue to be provided. No functional changes,
 | |
| 					dnl # but preparation for inflight accounting.
 | |
| 					dnl #
 | |
| 					AC_MSG_CHECKING([whether generic_*_io_acct wants 4 args])
 | |
| 					ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_4args],
 | |
| 					    [generic_start_io_acct], [block/bio.c], [
 | |
| 						AC_MSG_RESULT(yes)
 | |
| 						AC_DEFINE(HAVE_GENERIC_IO_ACCT_4ARG, 1,
 | |
| 						    [generic_*_io_acct() 4 arg available])
 | |
| 					], [
 | |
| 						AC_MSG_RESULT(no)
 | |
| 
 | |
| 						dnl #
 | |
| 						dnl # 3.19 API addition
 | |
| 						dnl #
 | |
| 						dnl # torvalds/linux@394ffa50 allows us to increment
 | |
| 						dnl # iostat counters without generic_make_request().
 | |
| 						dnl #
 | |
| 						AC_MSG_CHECKING(
 | |
| 						    [whether generic_*_io_acct wants 3 args])
 | |
| 						ZFS_LINUX_TEST_RESULT_SYMBOL([generic_acct_3args],
 | |
| 						    [generic_start_io_acct], [block/bio.c], [
 | |
| 							AC_MSG_RESULT(yes)
 | |
| 							AC_DEFINE(HAVE_GENERIC_IO_ACCT_3ARG, 1,
 | |
| 							    [generic_*_io_acct() 3 arg available])
 | |
| 						], [
 | |
| 							AC_MSG_RESULT(no)
 | |
| 						])
 | |
| 					])
 | |
| 				])
 | |
| 			])
 | |
| 		])
 | |
| 	])
 | |
| ])
 |