mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Linux 5.19 compat: bdev_max_discard_sectors()
Linux 5.19 commit torvalds/linux@70200574cc removed the blk_queue_discard() helper function. The preferred interface is to now use the bdev_max_discard_sectors() function to check for discard support. Reviewed-by: Tony Hutter <hutter2@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #13515
This commit is contained in:
		
							parent
							
								
									5a639f0802
								
							
						
					
					
						commit
						9ce5eb18ef
					
				| @ -74,6 +74,8 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [ | ||||
| 		AC_DEFINE(HAVE_BLK_QUEUE_UPDATE_READAHEAD, 1, | ||||
| 		    [blk_queue_update_readahead() exists]) | ||||
| 	],[ | ||||
| 		AC_MSG_RESULT(no) | ||||
| 
 | ||||
| 		AC_MSG_CHECKING([whether disk_update_readahead() exists]) | ||||
| 		ZFS_LINUX_TEST_RESULT([disk_update_readahead], [ | ||||
| 			AC_MSG_RESULT(yes) | ||||
| @ -86,10 +88,19 @@ AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_UPDATE_READAHEAD], [ | ||||
| ]) | ||||
| 
 | ||||
| dnl # | ||||
| dnl # 2.6.32 API, | ||||
| dnl #   blk_queue_discard() | ||||
| dnl # 5.19: bdev_max_discard_sectors() available | ||||
| dnl # 2.6.32: blk_queue_discard() available | ||||
| dnl # | ||||
| AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [ | ||||
| 	ZFS_LINUX_TEST_SRC([bdev_max_discard_sectors], [ | ||||
| 		#include <linux/blkdev.h> | ||||
| 	],[ | ||||
| 		struct block_device *bdev __attribute__ ((unused)) = NULL; | ||||
| 		unsigned int error __attribute__ ((unused)); | ||||
| 
 | ||||
| 		error = bdev_max_discard_sectors(bdev); | ||||
| 	]) | ||||
| 
 | ||||
| 	ZFS_LINUX_TEST_SRC([blk_queue_discard], [ | ||||
| 		#include <linux/blkdev.h> | ||||
| 	],[ | ||||
| @ -102,13 +113,24 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [ | ||||
| ]) | ||||
| 
 | ||||
| AC_DEFUN([ZFS_AC_KERNEL_BLK_QUEUE_DISCARD], [ | ||||
| 	AC_MSG_CHECKING([whether bdev_max_discard_sectors() is available]) | ||||
| 	ZFS_LINUX_TEST_RESULT([bdev_max_discard_sectors], [ | ||||
| 		AC_MSG_RESULT(yes) | ||||
| 		AC_DEFINE(HAVE_BDEV_MAX_DISCARD_SECTORS, 1, | ||||
| 		    [bdev_max_discard_sectors() is available]) | ||||
| 	],[ | ||||
| 		AC_MSG_RESULT(no) | ||||
| 
 | ||||
| 		AC_MSG_CHECKING([whether blk_queue_discard() is available]) | ||||
| 		ZFS_LINUX_TEST_RESULT([blk_queue_discard], [ | ||||
| 			AC_MSG_RESULT(yes) | ||||
| 			AC_DEFINE(HAVE_BLK_QUEUE_DISCARD, 1, | ||||
| 			    [blk_queue_discard() is available]) | ||||
| 		],[ | ||||
| 			ZFS_LINUX_TEST_ERROR([blk_queue_discard]) | ||||
| 		]) | ||||
| 	]) | ||||
| ]) | ||||
| 
 | ||||
| dnl # | ||||
| dnl # 4.8 API, | ||||
|  | ||||
| @ -134,6 +134,8 @@ AC_DEFUN([ZFS_AC_KERNEL_VFS_IOV_ITER], [ | ||||
| 		AC_DEFINE(HAVE_IOV_ITER_FAULT_IN_READABLE, 1, | ||||
| 		    [iov_iter_fault_in_readable() is available]) | ||||
| 	],[ | ||||
| 		AC_MSG_RESULT(no) | ||||
| 
 | ||||
| 		AC_MSG_CHECKING([whether fault_in_iov_iter_readable() is available]) | ||||
| 		ZFS_LINUX_TEST_RESULT([fault_in_iov_iter_readable], [ | ||||
| 			AC_MSG_RESULT(yes) | ||||
|  | ||||
| @ -494,6 +494,25 @@ blk_queue_discard_granularity(struct request_queue *q, unsigned int dg) | ||||
| 	q->limits.discard_granularity = dg; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * 5.19 API, | ||||
|  *   bdev_max_discard_sectors() | ||||
|  * | ||||
|  * 2.6.32 API, | ||||
|  *   blk_queue_discard() | ||||
|  */ | ||||
| static inline boolean_t | ||||
| bdev_discard_supported(struct block_device *bdev) | ||||
| { | ||||
| #if defined(HAVE_BDEV_MAX_DISCARD_SECTORS) | ||||
| 	return (!!bdev_max_discard_sectors(bdev)); | ||||
| #elif defined(HAVE_BLK_QUEUE_DISCARD) | ||||
| 	return (!!blk_queue_discard(bdev_get_queue(bdev))); | ||||
| #else | ||||
| #error "Unsupported kernel" | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * 4.8 API, | ||||
|  *   blk_queue_secure_erase() | ||||
|  | ||||
| @ -316,7 +316,7 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize, | ||||
| 	v->vdev_nowritecache = B_FALSE; | ||||
| 
 | ||||
| 	/* Set when device reports it supports TRIM. */ | ||||
| 	v->vdev_has_trim = !!blk_queue_discard(q); | ||||
| 	v->vdev_has_trim = bdev_discard_supported(vd->vd_bdev); | ||||
| 
 | ||||
| 	/* Set when device reports it supports secure TRIM. */ | ||||
| 	v->vdev_has_securetrim = !!blk_queue_discard_secure(q); | ||||
|  | ||||
| @ -1050,7 +1050,9 @@ zvol_os_create_minor(const char *name) | ||||
| 	    (zvol_max_discard_blocks * zv->zv_volblocksize) >> 9); | ||||
| 	blk_queue_discard_granularity(zv->zv_zso->zvo_queue, | ||||
| 	    zv->zv_volblocksize); | ||||
| #ifdef QUEUE_FLAG_DISCARD | ||||
| 	blk_queue_flag_set(QUEUE_FLAG_DISCARD, zv->zv_zso->zvo_queue); | ||||
| #endif | ||||
| #ifdef QUEUE_FLAG_NONROT | ||||
| 	blk_queue_flag_set(QUEUE_FLAG_NONROT, zv->zv_zso->zvo_queue); | ||||
| #endif | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Brian Behlendorf
						Brian Behlendorf