mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Linux 5.17 compat: GENHD_FL_EXT_DEVT / GENHD_FL_NO_PART_SCAN
As of the 5.17 kernel the GENHD_FL_EXT_DEVT flag has been removed
and the GENHD_FL_NO_PART_SCAN flag renamed GENHD_FL_NO_PART. Update
zvol_alloc() to set GENHD_FL_NO_PART for the newer kernels which
is sufficient.  The behavior for prior kernels remains unchanged.
1ebe2e5f ("block: remove GENHD_FL_EXT_DEVT")
46e7eac6 ("block: rename GENHD_FL_NO_PART_SCAN to GENHD_FL_NO_PART")
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #13294
Closes #13297
			
			
This commit is contained in:
		
							parent
							
								
									ec4d860eb0
								
							
						
					
					
						commit
						026f126b83
					
				
							
								
								
									
										58
									
								
								config/kernel-genhd-flags.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								config/kernel-genhd-flags.m4
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| dnl # | ||||
| dnl # 5.17 API change, | ||||
| dnl # | ||||
| dnl # GENHD_FL_EXT_DEVT flag removed | ||||
| dnl # GENHD_FL_NO_PART_SCAN renamed GENHD_FL_NO_PART | ||||
| dnl # | ||||
| AC_DEFUN([ZFS_AC_KERNEL_SRC_GENHD_FLAGS], [ | ||||
| 
 | ||||
| 	ZFS_LINUX_TEST_SRC([genhd_fl_ext_devt], [ | ||||
| 		#include <linux/blkdev.h> | ||||
| 	], [ | ||||
| 		int flags __attribute__ ((unused)) = GENHD_FL_EXT_DEVT; | ||||
| 	]) | ||||
| 
 | ||||
| 	ZFS_LINUX_TEST_SRC([genhd_fl_no_part], [ | ||||
| 		#include <linux/blkdev.h> | ||||
| 	], [ | ||||
| 		int flags __attribute__ ((unused)) = GENHD_FL_NO_PART; | ||||
| 	]) | ||||
| 
 | ||||
| 	ZFS_LINUX_TEST_SRC([genhd_fl_no_part_scan], [ | ||||
| 		#include <linux/blkdev.h> | ||||
| 	], [ | ||||
| 		int flags __attribute__ ((unused)) = GENHD_FL_NO_PART_SCAN; | ||||
| 	]) | ||||
| ]) | ||||
| 
 | ||||
| AC_DEFUN([ZFS_AC_KERNEL_GENHD_FLAGS], [ | ||||
| 
 | ||||
| 	AC_MSG_CHECKING([whether GENHD_FL_EXT_DEVT flag is available]) | ||||
| 	ZFS_LINUX_TEST_RESULT([genhd_fl_ext_devt], [ | ||||
| 		AC_MSG_RESULT(yes) | ||||
| 		AC_DEFINE(ZFS_GENHD_FL_EXT_DEVT, GENHD_FL_EXT_DEVT, | ||||
| 		    [GENHD_FL_EXT_DEVT flag is available]) | ||||
| 	], [ | ||||
| 		AC_MSG_RESULT(no) | ||||
| 		AC_DEFINE(ZFS_GENHD_FL_EXT_DEVT, 0, | ||||
| 		    [GENHD_FL_EXT_DEVT flag is not available]) | ||||
| 	]) | ||||
| 
 | ||||
| 	AC_MSG_CHECKING([whether GENHD_FL_NO_PART flag is available]) | ||||
| 	ZFS_LINUX_TEST_RESULT([genhd_fl_no_part], [ | ||||
| 		AC_MSG_RESULT(yes) | ||||
| 		AC_DEFINE(ZFS_GENHD_FL_NO_PART, GENHD_FL_NO_PART, | ||||
| 		    [GENHD_FL_NO_PART flag is available]) | ||||
| 	], [ | ||||
| 		AC_MSG_RESULT(no) | ||||
| 
 | ||||
| 		AC_MSG_CHECKING([whether GENHD_FL_NO_PART_SCAN flag is available]) | ||||
| 		ZFS_LINUX_TEST_RESULT([genhd_fl_no_part_scan], [ | ||||
| 			AC_MSG_RESULT(yes) | ||||
| 			AC_DEFINE(ZFS_GENHD_FL_NO_PART, GENHD_FL_NO_PART_SCAN, | ||||
| 			    [GENHD_FL_NO_PART_SCAN flag is available]) | ||||
| 		], [ | ||||
| 			ZFS_LINUX_TEST_ERROR([GENHD_FL_NO_PART|GENHD_FL_NO_PART_SCAN]) | ||||
| 		]) | ||||
| 	]) | ||||
| ]) | ||||
| @ -61,6 +61,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ | ||||
| 	ZFS_AC_KERNEL_SRC_BIO | ||||
| 	ZFS_AC_KERNEL_SRC_BLKDEV | ||||
| 	ZFS_AC_KERNEL_SRC_BLK_QUEUE | ||||
| 	ZFS_AC_KERNEL_SRC_GENHD_FLAGS | ||||
| 	ZFS_AC_KERNEL_SRC_REVALIDATE_DISK | ||||
| 	ZFS_AC_KERNEL_SRC_GET_DISK_RO | ||||
| 	ZFS_AC_KERNEL_SRC_GENERIC_READLINK_GLOBAL | ||||
| @ -174,6 +175,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ | ||||
| 	ZFS_AC_KERNEL_BIO | ||||
| 	ZFS_AC_KERNEL_BLKDEV | ||||
| 	ZFS_AC_KERNEL_BLK_QUEUE | ||||
| 	ZFS_AC_KERNEL_GENHD_FLAGS | ||||
| 	ZFS_AC_KERNEL_REVALIDATE_DISK | ||||
| 	ZFS_AC_KERNEL_GET_DISK_RO | ||||
| 	ZFS_AC_KERNEL_GENERIC_READLINK_GLOBAL | ||||
|  | ||||
| @ -906,22 +906,17 @@ zvol_alloc(dev_t dev, const char *name) | ||||
| 	zso->zvo_disk->major = zvol_major; | ||||
| 	zso->zvo_disk->events = DISK_EVENT_MEDIA_CHANGE; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Setting ZFS_VOLMODE_DEV disables partitioning on ZVOL devices. | ||||
| 	 * This is accomplished by limiting the number of minors for the | ||||
| 	 * device to one and explicitly disabling partition scanning. | ||||
| 	 */ | ||||
| 	if (volmode == ZFS_VOLMODE_DEV) { | ||||
| 		/*
 | ||||
| 		 * ZFS_VOLMODE_DEV disable partitioning on ZVOL devices: set | ||||
| 		 * gendisk->minors = 1 as noted in include/linux/blkdev.h. | ||||
| 		 * Also disable extended partition numbers (GENHD_FL_EXT_DEVT) | ||||
| 		 * and suppresses partition scanning (GENHD_FL_NO_PART_SCAN) | ||||
| 		 * setting gendisk->flags accordingly. | ||||
| 		 */ | ||||
| 		zso->zvo_disk->minors = 1; | ||||
| #if defined(GENHD_FL_EXT_DEVT) | ||||
| 		zso->zvo_disk->flags &= ~GENHD_FL_EXT_DEVT; | ||||
| #endif | ||||
| #if defined(GENHD_FL_NO_PART_SCAN) | ||||
| 		zso->zvo_disk->flags |= GENHD_FL_NO_PART_SCAN; | ||||
| #endif | ||||
| 		zso->zvo_disk->flags &= ~ZFS_GENHD_FL_EXT_DEVT; | ||||
| 		zso->zvo_disk->flags |= ZFS_GENHD_FL_NO_PART; | ||||
| 	} | ||||
| 
 | ||||
| 	zso->zvo_disk->first_minor = (dev & MINORMASK); | ||||
| 	zso->zvo_disk->fops = &zvol_ops; | ||||
| 	zso->zvo_disk->private_data = zv; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Brian Behlendorf
						Brian Behlendorf