mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Linux 5.16: wait_on_page_bit() no longer available to modules
Instead, linux/pagemap.h offers a number of folio-specific functions to be called instead. In this case, module/os/linux/zfs/zfs_vnops_os.c wants to call wait_on_page_bit(pp, PG_writeback). This gets replaced with folio_wait_bit(folio_page(pp), PG_writeback). This change modifies the code to conditionally compile that if configure identifies th presence of the folio_wait_bit() function. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Coleman Kane <ckane@colemankane.org> Closes #12800
This commit is contained in:
		
							parent
							
								
									a1a29bf8fc
								
							
						
					
					
						commit
						12d27e7134
					
				
							
								
								
									
										26
									
								
								config/kernel-pagemap-folio_wait_bit.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								config/kernel-pagemap-folio_wait_bit.m4
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| dnl # | ||||
| dnl # Linux 5.16 no longer allows directly calling wait_on_page_bit, and | ||||
| dnl # instead requires you to call folio-specific functions. In this case, | ||||
| dnl # wait_on_page_bit(pg, PG_writeback) becomes | ||||
| dnl # folio_wait_bit(pg, PG_writeback) | ||||
| dnl # | ||||
| AC_DEFUN([ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT], [ | ||||
| 	ZFS_LINUX_TEST_SRC([pagemap_has_folio_wait_bit], [ | ||||
| 		#include <linux/pagemap.h> | ||||
| 	],[ | ||||
| 		static struct folio *f = NULL; | ||||
| 
 | ||||
| 		folio_wait_bit(f, PG_writeback); | ||||
| 	]) | ||||
| ]) | ||||
| 
 | ||||
| AC_DEFUN([ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT], [ | ||||
| 	AC_MSG_CHECKING([folio_wait_bit() exists]) | ||||
| 	ZFS_LINUX_TEST_RESULT([pagemap_has_folio_wait_bit], [ | ||||
| 		AC_MSG_RESULT([yes]) | ||||
| 		AC_DEFINE(HAVE_PAGEMAP_FOLIO_WAIT_BIT, 1, | ||||
| 			[folio_wait_bit() exists]) | ||||
| 	],[ | ||||
| 		AC_MSG_RESULT([no]) | ||||
| 	]) | ||||
| ]) | ||||
| @ -134,6 +134,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [ | ||||
| 	ZFS_AC_KERNEL_SRC_SET_SPECIAL_STATE | ||||
| 	ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS | ||||
| 	ZFS_AC_KERNEL_SRC_STANDALONE_LINUX_STDARG | ||||
| 	ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT | ||||
| 
 | ||||
| 	AC_MSG_CHECKING([for available kernel interfaces]) | ||||
| 	ZFS_LINUX_TEST_COMPILE_ALL([kabi]) | ||||
| @ -241,6 +242,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [ | ||||
| 	ZFS_AC_KERNEL_SET_SPECIAL_STATE | ||||
| 	ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS | ||||
| 	ZFS_AC_KERNEL_STANDALONE_LINUX_STDARG | ||||
| 	ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT | ||||
| ]) | ||||
| 
 | ||||
| dnl # | ||||
|  | ||||
| @ -3556,7 +3556,11 @@ zfs_putpage(struct inode *ip, struct page *pp, struct writeback_control *wbc) | ||||
| 
 | ||||
| 		if (wbc->sync_mode != WB_SYNC_NONE) { | ||||
| 			if (PageWriteback(pp)) | ||||
| #ifdef HAVE_PAGEMAP_FOLIO_WAIT_BIT | ||||
| 				folio_wait_bit(page_folio(pp), PG_writeback); | ||||
| #else | ||||
| 				wait_on_page_bit(pp, PG_writeback); | ||||
| #endif | ||||
| 		} | ||||
| 
 | ||||
| 		ZFS_EXIT(zfsvfs); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Coleman Kane
						Coleman Kane