diff options
author | Michael Laß | 2021-07-30 23:51:40 +0200 |
---|---|---|
committer | Michael Laß | 2021-07-30 23:51:40 +0200 |
commit | a3eeb7a932ee2c9abd8828c37e5d93021957d02b (patch) | |
tree | 8cfc3af388ee843e6bc933be5717b264b63daaa6 | |
parent | 2c0fcd8e9b26cae95bf9fbd92508beedb4c629b7 (diff) | |
download | aur-a3eeb7a932ee2c9abd8828c37e5d93021957d02b.tar.gz |
Update to 1.8.8
-rw-r--r-- | .SRCINFO | 33 | ||||
-rw-r--r-- | 0001-Avoid-duplicate-definitions-of-globals.patch | 353 | ||||
-rw-r--r-- | 0002-LINUX-5.8-Replace-kernel_setsockopt-with-new-funcs.patch | 159 | ||||
-rw-r--r-- | 0003-LINUX-5.8-do-not-set-name-field-in-backing_dev_info.patch | 49 | ||||
-rw-r--r-- | 0004-LINUX-5.8-use-lru_cache_add.patch | 108 | ||||
-rw-r--r-- | 0005-LINUX-5.9-Remove-HAVE_UNLOCKED_IOCTL-COMPAT_IOCTL.patch | 169 | ||||
-rw-r--r-- | 0006-LINUX-Fix-includes-for-fatal_signal_pending-test.patch | 73 | ||||
-rw-r--r-- | 0007-Linux-Refactor-test-for-32bit-compat.patch | 212 | ||||
-rw-r--r-- | 0008-Linux-5.11-Test-32bit-compat-with-in_compat_syscall.patch | 98 | ||||
-rw-r--r-- | 0009-LINUX-Introduce-afs_d_path.patch | 67 | ||||
-rw-r--r-- | 0010-Linux-Create-wrapper-for-setattr_prepare.patch | 65 | ||||
-rw-r--r-- | 0011-Linux-5.12-Add-user_namespace-param-to-inode-ops.patch | 289 | ||||
-rw-r--r-- | PKGBUILD | 55 |
13 files changed, 11 insertions, 1719 deletions
@@ -1,7 +1,7 @@ pkgbase = openafs-modules-dkms pkgdesc = Kernel module for OpenAFS (dkms) - pkgver = 1.8.7 - pkgrel = 3 + pkgver = 1.8.8 + pkgrel = 1 url = http://www.openafs.org arch = i686 arch = x86_64 @@ -10,37 +10,14 @@ pkgbase = openafs-modules-dkms depends = dkms depends = libelf depends = openafs - provides = openafs-modules=1.8.7 + provides = openafs-modules=1.8.8 conflicts = openafs-features-libafs conflicts = openafs-modules conflicts = openafs<1.6.6-2 options = !emptydirs - source = http://openafs.org/dl/openafs/1.8.7/openafs-1.8.7-src.tar.bz2 + source = http://openafs.org/dl/openafs/1.8.8/openafs-1.8.8-src.tar.bz2 source = dkms.conf - source = 0001-Avoid-duplicate-definitions-of-globals.patch - source = 0002-LINUX-5.8-Replace-kernel_setsockopt-with-new-funcs.patch - source = 0003-LINUX-5.8-do-not-set-name-field-in-backing_dev_info.patch - source = 0004-LINUX-5.8-use-lru_cache_add.patch - source = 0005-LINUX-5.9-Remove-HAVE_UNLOCKED_IOCTL-COMPAT_IOCTL.patch - source = 0006-LINUX-Fix-includes-for-fatal_signal_pending-test.patch - source = 0007-Linux-Refactor-test-for-32bit-compat.patch - source = 0008-Linux-5.11-Test-32bit-compat-with-in_compat_syscall.patch - source = 0009-LINUX-Introduce-afs_d_path.patch - source = 0010-Linux-Create-wrapper-for-setattr_prepare.patch - source = 0011-Linux-5.12-Add-user_namespace-param-to-inode-ops.patch - sha256sums = 53543a561fce67714fec9f2a6bf408c5cc1d061c7dc9d1459458275e8ccbfa79 + sha256sums = daa8ef86a7727facfcde3bc97a6ad143129c1c25ee35f3347080ec7e9d284da0 sha256sums = 5ea5e184f9b44f5ed45817d2b5a10149d15c8c54f49e0b5b4b773652673cb9b0 - sha256sums = 909ebe2f2f82187ec5c8bd19a385e310521dceedb0b0d5ce8413809a37fe5654 - sha256sums = 2439b2f663feed02c526f4e34b2cdc2a1d5ad35f7223ade87508c1cf4359ee9c - sha256sums = e605d4e7154f9ccf4dec24fec27abe4e2947713f35dae6aa8698e5f8722609a7 - sha256sums = 15b53b4ab0578eaa31f849670990e15949e67be8b330d7581825a5e8408953ed - sha256sums = ba8c81c035303cbcf204744516a83b66adac94384aaa59ea2ea1a619a41aa7c0 - sha256sums = d078882d94adf881bac2e7955689931abe7ac443db86d85e0b60c72d8b27738e - sha256sums = 19ca49013e32824002e355a85df6e25028283a0b06a6409cc7d5cd9800fea488 - sha256sums = 52d40f8a3b032a9fa0ae57bc15d3611bc652ff6e417a488eac4223cef0db9142 - sha256sums = 457474e625565c28daa6d642b2416b4398b2b9fec3a8b90c048fc0460412a0ce - sha256sums = 76d73a55d3e8da63c9ead2cecdec1efbaeb78739bb5abf635a64380eeba35158 - sha256sums = 8bc24efe33f06228134dd27e5c9a6832abb436e2fbe3fab09b529fed4a5b406c pkgname = openafs-modules-dkms - diff --git a/0001-Avoid-duplicate-definitions-of-globals.patch b/0001-Avoid-duplicate-definitions-of-globals.patch deleted file mode 100644 index e166c6aa5f1a..000000000000 --- a/0001-Avoid-duplicate-definitions-of-globals.patch +++ /dev/null @@ -1,353 +0,0 @@ -From ac4debb46bc0b95ff2f98d416703bc8df60b8415 Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 22 May 2020 12:16:48 -0600 -Subject: [PATCH 01/11] Avoid duplicate definitions of globals - -GCC 10 changed a default flag from -fcommon to -fno-common. See -https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85678 for some background. - -The change in gcc 10 results in build link-time errors. For example: - ../../src/xstat/.libs/liboafs_xstat_cm.a(xstat_cm.o):(.bss+0x2050): - multiple definition of `numCollections'; - -Ensure that only one definition for global data objects exist and change -references to use "extern" as needed. - -To ensure that future changes do not introduce duplicated global -definitions, add the -fno-common flag to XCFLAGS when using the -configure --enable-checking setting. - -[cwills@sinenomine.net: Note for 1.8.x: renamed terminationEvent -to cm_terminationEvent/fs_terminationEvent instead of deleting it.] - -Reviewed-on: https://gerrit.openafs.org/14106 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit 0e2072ae386d4111bef161eb955964b649c31386) - -Change-Id: I54ca61d372cf763e4a28c0b0829ea361219f6203 -Reviewed-on: https://gerrit.openafs.org/14217 -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Mark Vitale <mvitale@sinenomine.net> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/bucoord/main.c | 6 ++---- - src/butc/dbentries.c | 2 +- - src/butc/dump.c | 7 +++---- - src/butc/lwps.c | 2 +- - src/butc/tcmain.c | 2 +- - src/cf/osconf.m4 | 2 +- - src/fsprobe/fsprobe.h | 1 - - src/uss/uss_vol.c | 2 +- - src/viced/host.c | 2 ++ - src/viced/host.h | 2 +- - src/vol/fssync-server.c | 3 --- - src/vol/volume.c | 3 --- - src/xstat/xstat_cm.c | 7 +++---- - src/xstat/xstat_cm.h | 3 +-- - src/xstat/xstat_cm_test.c | 4 ++-- - src/xstat/xstat_fs.c | 7 +++---- - src/xstat/xstat_fs.h | 3 +-- - src/xstat/xstat_fs_test.c | 4 ++-- - 18 files changed, 25 insertions(+), 37 deletions(-) - -diff --git a/src/bucoord/main.c b/src/bucoord/main.c -index d2a5f368b..a453cc9dd 100644 ---- a/src/bucoord/main.c -+++ b/src/bucoord/main.c -@@ -47,9 +47,9 @@ char tcell[64]; - /* - * Global configuration information for the Backup Coordinator. - */ --struct bc_config *bc_globalConfig; /*Ptr to global BC configuration info */ -+extern struct bc_config *bc_globalConfig; /*Ptr to global BC configuration info */ - --struct ubik_client *cstruct; /* Ptr to Ubik client structure */ -+extern struct ubik_client *cstruct; /* Ptr to Ubik client structure */ - time_t tokenExpires; /* The token's expiration time */ - - static const char *DefaultConfDir; /*Default backup config directory */ -@@ -162,8 +162,6 @@ bc_InitTextConfig(void) - udbClientTextP ctPtr; - int i; - -- extern struct bc_config *bc_globalConfig; -- - mkdir(DefaultConfDir, 777); /* temporary */ - - /* initialize the client text structures */ -diff --git a/src/butc/dbentries.c b/src/butc/dbentries.c -index 37b35d307..29ddcbd01 100644 ---- a/src/butc/dbentries.c -+++ b/src/butc/dbentries.c -@@ -31,7 +31,7 @@ - #include "error_macros.h" - - dlqlinkT savedEntries; --dlqlinkT entries_to_flush; -+static dlqlinkT entries_to_flush; - - int dbWatcherinprogress; - -diff --git a/src/butc/dump.c b/src/butc/dump.c -index 1f4eb9b8f..f8fc943a6 100644 ---- a/src/butc/dump.c -+++ b/src/butc/dump.c -@@ -42,8 +42,7 @@ extern int isafile; - extern int forcemultiple; - - extern struct ubik_client *cstruct; --dlqlinkT savedEntries; --dlqlinkT entries_to_flush; -+extern dlqlinkT savedEntries; - - extern afs_int32 groupId; - extern afs_int32 BufferSize; -@@ -61,8 +60,8 @@ extern char *xbsalGName; - extern char *globalButcLog; - #endif /*xbsa */ - --afs_int32 dataSize; /* Size of data to read on each rx_Read() call */ --afs_int32 tapeblocks; /* Number of 16K tape datablocks in buffer (!CONF_XBSA) */ -+extern afs_int32 dataSize; /* Size of data to read on each rx_Read() call */ -+extern afs_int32 tapeblocks; /* Number of 16K tape datablocks in buffer (!CONF_XBSA) */ - - /* TBD - * -diff --git a/src/butc/lwps.c b/src/butc/lwps.c -index d262991d8..aff5e9e07 100644 ---- a/src/butc/lwps.c -+++ b/src/butc/lwps.c -@@ -51,7 +51,7 @@ extern int forcemultiple; - #endif - - /* XBSA Global Parameters */ --afs_int32 xbsaType; -+extern afs_int32 xbsaType; - #ifdef xbsa - struct butx_transactionInfo butxInfo; - #endif -diff --git a/src/butc/tcmain.c b/src/butc/tcmain.c -index e8a20938e..a0298addb 100644 ---- a/src/butc/tcmain.c -+++ b/src/butc/tcmain.c -@@ -66,7 +66,7 @@ - #define TL_PREFIX "TL" - #define CFG_PREFIX "CFG" - --struct ubik_client *cstruct; -+extern struct ubik_client *cstruct; - FILE *logIO, *ErrorlogIO, *centralLogIO, *lastLogIO; - char lFile[AFSDIR_PATH_MAX]; - char logFile[AFSDIR_PATH_MAX + 256]; -diff --git a/src/cf/osconf.m4 b/src/cf/osconf.m4 -index 5f0d73fc2..e36152bd4 100644 ---- a/src/cf/osconf.m4 -+++ b/src/cf/osconf.m4 -@@ -672,7 +672,7 @@ if test "x$GCC" = "xyes"; then - XCFLAGS="${XCFLAGS} -Wall -Wstrict-prototypes -Wold-style-definition -Wpointer-arith" - fi - if test "x$enable_checking" != "xno"; then -- XCFLAGS="${XCFLAGS} -Wall -Wstrict-prototypes -Wold-style-definition -Werror -fdiagnostics-show-option -Wpointer-arith" -+ XCFLAGS="${XCFLAGS} -Wall -Wstrict-prototypes -Wold-style-definition -Werror -fdiagnostics-show-option -Wpointer-arith -fno-common" - if test "x$enable_checking" != "xall"; then - CFLAGS_NOERROR="-Wno-error" - CFLAGS_NOUNUSED="-Wno-unused" -diff --git a/src/fsprobe/fsprobe.h b/src/fsprobe/fsprobe.h -index 94083bfe9..3060371ae 100644 ---- a/src/fsprobe/fsprobe.h -+++ b/src/fsprobe/fsprobe.h -@@ -103,7 +103,6 @@ struct fsprobe_ProbeResults { - - extern int fsprobe_numServers; /*# servers connected */ - extern struct fsprobe_ConnectionInfo *fsprobe_ConnInfo; /*Ptr to connections */ --extern int numCollections; /*Num data collections */ - extern struct fsprobe_ProbeResults fsprobe_Results; /*Latest probe results */ - - extern int fsprobe_Init(int, struct sockaddr_in *, int, int (*)(void), int ); -diff --git a/src/uss/uss_vol.c b/src/uss/uss_vol.c -index c9c13941d..b31a42a06 100644 ---- a/src/uss/uss_vol.c -+++ b/src/uss/uss_vol.c -@@ -61,7 +61,7 @@ extern int line; - * will work and we can avoid nasty little core dumps. - */ - struct ubik_client *uconn_vldbP; /*Ubik connection struct */ --struct ubik_client *cstruct; /*Required name for above */ -+extern struct ubik_client *cstruct; /*Required name for above */ - - /* - * ------------------------ Private globals ----------------------- -diff --git a/src/viced/host.c b/src/viced/host.c -index 36f9e88c0..e7657caac 100644 ---- a/src/viced/host.c -+++ b/src/viced/host.c -@@ -67,6 +67,8 @@ int hostCount = 0; /* number of hosts in hostList */ - int rxcon_ident_key; - int rxcon_client_key; - -+struct host *(hosttableptrs[h_MAXHOSTTABLES]); -+ - static struct rx_securityClass *sc = NULL; - static int h_quota_limit; - -diff --git a/src/viced/host.h b/src/viced/host.h -index fead948f6..272dcdbe7 100644 ---- a/src/viced/host.h -+++ b/src/viced/host.h -@@ -254,7 +254,7 @@ extern int h_RestoreState(void); - #define H_ENUMERATE_BAIL(flags) ((flags)|0x80000000) - #define H_ENUMERATE_ISSET_BAIL(flags) ((flags)&0x80000000) - --struct host *(hosttableptrs[h_MAXHOSTTABLES]); /* Used by h_itoh */ -+extern struct host *(hosttableptrs[h_MAXHOSTTABLES]); /* Used by h_itoh */ - #define h_htoi(host) ((host)->index) /* index isn't zeroed, no need to lock */ - #define h_itoh(hostindex) (hosttableptrs[(hostindex)>>h_HTSHIFT]+((hostindex)&(h_HTSPERBLOCK-1))) - -diff --git a/src/vol/fssync-server.c b/src/vol/fssync-server.c -index 2d7cd6011..69d902f1b 100644 ---- a/src/vol/fssync-server.c -+++ b/src/vol/fssync-server.c -@@ -79,9 +79,6 @@ - #endif /* USE_UNIX_SOCKETS */ - - #ifdef FSSYNC_BUILD_SERVER -- --int (*V_BreakVolumeCallbacks) (VolumeId volume); -- - #define MAXHANDLERS 4 /* Up to 4 clients; must be at least 2, so that - * move = dump+restore can run on single server */ - #define MAXOFFLINEVOLUMES 128 /* This needs to be as big as the maximum -diff --git a/src/vol/volume.c b/src/vol/volume.c -index f1ff10a7b..3d9e47ef3 100644 ---- a/src/vol/volume.c -+++ b/src/vol/volume.c -@@ -124,9 +124,6 @@ pthread_cond_t vol_vinit_cond; - int vol_attach_threads = 1; - #endif /* AFS_PTHREAD_ENV */ - --/* start-time configurable I/O parameters */ --ih_init_params vol_io_params; -- - #ifdef AFS_DEMAND_ATTACH_FS - pthread_mutex_t vol_salvsync_mutex; - -diff --git a/src/xstat/xstat_cm.c b/src/xstat/xstat_cm.c -index d8600c124..3f5bfc843 100644 ---- a/src/xstat/xstat_cm.c -+++ b/src/xstat/xstat_cm.c -@@ -32,9 +32,8 @@ - int xstat_cm_numServers; /*Num connected servers */ - struct xstat_cm_ConnectionInfo - *xstat_cm_ConnInfo; /*Ptr to connection array */ --int numCollections; /*Number of data collections */ - struct xstat_cm_ProbeResults xstat_cm_Results; /*Latest probe results */ --char terminationEvent; /*One-shot termination event */ -+char cm_terminationEvent; /*One-shot termination event */ - - afs_int32 xstat_cmData[AFSCB_MAX_XSTAT_LONGS]; /*Buffer for collected data */ - -@@ -315,8 +314,8 @@ xstat_cm_LWP(void *unused) - */ - if (xstat_cm_debug) - printf("[%s] Signalling main process at %" AFS_PTR_FMT "\n", rn, -- &terminationEvent); -- oneShotCode = LWP_SignalProcess(&terminationEvent); -+ &cm_terminationEvent); -+ oneShotCode = LWP_SignalProcess(&cm_terminationEvent); - if (oneShotCode) - fprintf(stderr, "[%s] Error %d from LWP_SignalProcess()", rn, - oneShotCode); -diff --git a/src/xstat/xstat_cm.h b/src/xstat/xstat_cm.h -index efbba531c..569011cc2 100644 ---- a/src/xstat/xstat_cm.h -+++ b/src/xstat/xstat_cm.h -@@ -86,10 +86,9 @@ struct xstat_cm_ProbeResults { - extern int xstat_cm_numServers; /*# connected servers */ - extern struct xstat_cm_ConnectionInfo - *xstat_cm_ConnInfo; /*Ptr to connections */ --extern int numCollections; /*Num data collections */ - extern struct xstat_cm_ProbeResults - xstat_cm_Results; /*Latest probe results */ --extern char terminationEvent; /*One-shot termination event */ -+extern char cm_terminationEvent; /*One-shot termination event */ - - /* - * ------------------------ Exported functions ------------------------ -diff --git a/src/xstat/xstat_cm_test.c b/src/xstat/xstat_cm_test.c -index b284237aa..7c5e56864 100644 ---- a/src/xstat/xstat_cm_test.c -+++ b/src/xstat/xstat_cm_test.c -@@ -881,8 +881,8 @@ RunTheTest(struct cmd_syndesc *a_s, void *arock) - */ - if (debugging_on) - printf("[%s] Calling LWP_WaitProcess() on event %" AFS_PTR_FMT -- "\n", rn, &terminationEvent); -- waitCode = LWP_WaitProcess(&terminationEvent); -+ "\n", rn, &cm_terminationEvent); -+ waitCode = LWP_WaitProcess(&cm_terminationEvent); - if (debugging_on) - printf("[%s] Returned from LWP_WaitProcess()\n", rn); - if (waitCode) { -diff --git a/src/xstat/xstat_fs.c b/src/xstat/xstat_fs.c -index 51dbe3847..dff930472 100644 ---- a/src/xstat/xstat_fs.c -+++ b/src/xstat/xstat_fs.c -@@ -33,9 +33,8 @@ - int xstat_fs_numServers; /*Num connected servers */ - struct xstat_fs_ConnectionInfo - *xstat_fs_ConnInfo; /*Ptr to connection array */ --int numCollections; /*Number of data collections */ - struct xstat_fs_ProbeResults xstat_fs_Results; /*Latest probe results */ --char terminationEvent; /*One-shot termination event */ -+char fs_terminationEvent; /*One-shot termination event */ - - afs_int32 xstat_fsData[AFS_MAX_XSTAT_LONGS]; /*Buffer for collected data */ - -@@ -334,8 +333,8 @@ xstat_fs_LWP(void *unused) - */ - if (xstat_fs_debug) - printf("[%s] Signalling main process at %" AFS_PTR_FMT "\n", rn, -- &terminationEvent); -- oneShotCode = LWP_SignalProcess(&terminationEvent); -+ &fs_terminationEvent); -+ oneShotCode = LWP_SignalProcess(&fs_terminationEvent); - if (oneShotCode) - fprintf(stderr, "[%s] Error %d from LWP_SignalProcess()", rn, - oneShotCode); -diff --git a/src/xstat/xstat_fs.h b/src/xstat/xstat_fs.h -index 6e2b77b85..a800ba679 100644 ---- a/src/xstat/xstat_fs.h -+++ b/src/xstat/xstat_fs.h -@@ -87,10 +87,9 @@ struct xstat_fs_ProbeResults { - extern int xstat_fs_numServers; /*# connected servers */ - extern struct xstat_fs_ConnectionInfo - *xstat_fs_ConnInfo; /*Ptr to connections */ --extern int numCollections; /*Num data collections */ - extern struct xstat_fs_ProbeResults - xstat_fs_Results; /*Latest probe results */ --extern char terminationEvent; /*One-shot termination event */ -+extern char fs_terminationEvent; /*One-shot termination event */ - - /* - * ------------------------ Exported functions ------------------------ -diff --git a/src/xstat/xstat_fs_test.c b/src/xstat/xstat_fs_test.c -index 853c2121e..d58ecf014 100644 ---- a/src/xstat/xstat_fs_test.c -+++ b/src/xstat/xstat_fs_test.c -@@ -778,8 +778,8 @@ RunTheTest(struct cmd_syndesc *a_s, void *dummy) - */ - if (debugging_on) - printf("[%s] Calling LWP_WaitProcess() on event %" AFS_PTR_FMT "\n", rn, -- &terminationEvent); -- waitCode = LWP_WaitProcess(&terminationEvent); -+ &fs_terminationEvent); -+ waitCode = LWP_WaitProcess(&fs_terminationEvent); - if (debugging_on) - printf("[%s] Returned from LWP_WaitProcess()\n", rn); - if (waitCode) { --- -2.31.1 - diff --git a/0002-LINUX-5.8-Replace-kernel_setsockopt-with-new-funcs.patch b/0002-LINUX-5.8-Replace-kernel_setsockopt-with-new-funcs.patch deleted file mode 100644 index c503f043b90c..000000000000 --- a/0002-LINUX-5.8-Replace-kernel_setsockopt-with-new-funcs.patch +++ /dev/null @@ -1,159 +0,0 @@ -From 509169ed302741e2499fbb116ed08408c08d3999 Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 3 Jul 2020 10:33:51 -0600 -Subject: [PATCH 02/11] LINUX 5.8: Replace kernel_setsockopt with new funcs -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Linux 5.8-rc1 commit 'net: remove kernel_setsockopt' (5a892ff2facb) -retires the kernel_setsockopt function. In prior kernel commits new -functions (ip_sock_set_*) were added to replace the specific functions -performed by kernel_setsockopt. - -Define new config test 'HAVE_IP_SOCK_SET' if the 'ip_sock_set' functions -are available. The config define 'HAVE_KERNEL_SETSOCKOPT' is no longer -set in Linux 5.8. - -Create wrapper functions that replace the kernel_setsockopt calls with -calls to the appropriate Linux kernel function(s) (depending on what -functions the kernel supports). - -Remove the unused 'kernel_getsockopt' function (used for building with -pre 2.6.19 kernels). - -For reference - Linux 2.6.19 introduced kernel_setsockopt - Linux 5.8 removed kernel_setsockopt and replaced the functionality - with a set of new functions (ip_sock_set_*) - -Reviewed-on: https://gerrit.openafs.org/14247 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit c48072b9800759ef1682b91ff1e962f6904a2594) - -Change-Id: I2724fad06b1882149d2066d13eced55eff5ee695 -Reviewed-on: https://gerrit.openafs.org/14267 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Michael Laß <lass@mail.uni-paderborn.de> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_compat.h | 43 +++++++++++++++++++++++++------------ - src/cf/linux-kernel-func.m4 | 6 ++++++ - src/rx/LINUX/rx_knet.c | 11 +++------- - 3 files changed, 38 insertions(+), 22 deletions(-) - -diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h -index 4999b89b9..620b3730c 100644 ---- a/src/afs/LINUX/osi_compat.h -+++ b/src/afs/LINUX/osi_compat.h -@@ -314,9 +314,22 @@ zero_user_segment(struct page *pp, unsigned int from1, unsigned int to1) - } - #endif - --#ifndef HAVE_LINUX_KERNEL_SETSOCKOPT -+#if defined(HAVE_LINUX_IP_SOCK_SET) -+# include <net/ip.h> -+/* ip_sock_set_* introduced in linux 5.8 */ -+static inline void -+afs_linux_sock_set_mtu_discover(struct socket *sockp, int pmtu) -+{ -+ ip_sock_set_mtu_discover(sockp->sk, pmtu); -+} -+static inline void -+afs_linux_sock_set_recverr(struct socket *sockp) -+{ -+ ip_sock_set_recverr(sockp->sk); -+} -+#else -+# if !defined(HAVE_LINUX_KERNEL_SETSOCKOPT) - /* Available from 2.6.19 */ -- - static inline int - kernel_setsockopt(struct socket *sockp, int level, int name, char *val, - unsigned int len) { -@@ -329,20 +342,22 @@ kernel_setsockopt(struct socket *sockp, int level, int name, char *val, - - return ret; - } -+# endif /* !HAVE_LINUX_KERNEL_SETSOCKOPT */ - --static inline int --kernel_getsockopt(struct socket *sockp, int level, int name, char *val, -- int *len) { -- mm_segment_t old_fs = get_fs(); -- int ret; -- -- set_fs(get_ds()); -- ret = sockp->ops->getsockopt(sockp, level, name, val, len); -- set_fs(old_fs); -- -- return ret; -+static inline void -+afs_linux_sock_set_mtu_discover(struct socket *sockp, int pmtu) -+{ -+ kernel_setsockopt(sockp, SOL_IP, IP_MTU_DISCOVER, (char *)&pmtu, -+ sizeof(pmtu)); - } --#endif -+static inline void -+afs_linux_sock_set_recverr(struct socket *sockp) -+{ -+ int recverr = 1; -+ kernel_setsockopt(sockp, SOL_IP, IP_RECVERR, (char *)&recverr, -+ sizeof(recverr)); -+} -+#endif /* !HAVE_LINUX_IP_SOCK_SET */ - - #ifdef HAVE_TRY_TO_FREEZE - static inline int -diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4 -index 07627db52..78ff48294 100644 ---- a/src/cf/linux-kernel-func.m4 -+++ b/src/cf/linux-kernel-func.m4 -@@ -151,6 +151,12 @@ AC_CHECK_LINUX_FUNC([lru_cache_add_file], - [#include <linux/swap.h>], - [lru_cache_add_file(NULL);]) - -+dnl Linux 5.8 replaced kernel_setsockopt with helper functions -+dnl e.g. ip_sock_set_mtu_discover, ip_sock_set_recverr -+AC_CHECK_LINUX_FUNC([ip_sock_set], -+ [#include <net/ip.h>], -+ [ip_sock_set_mtu_discover(NULL, 0);]) -+ - dnl Consequences - things which get set as a result of the - dnl above tests - AS_IF([test "x$ac_cv_linux_func_d_alloc_anon" = "xno"], -diff --git a/src/rx/LINUX/rx_knet.c b/src/rx/LINUX/rx_knet.c -index 9fbb563f3..50607c8f5 100644 ---- a/src/rx/LINUX/rx_knet.c -+++ b/src/rx/LINUX/rx_knet.c -@@ -34,7 +34,6 @@ - #include <linux/errqueue.h> - #include <linux/icmp.h> - #endif -- - #include "osi_compat.h" - - /* rxk_NewSocket -@@ -76,14 +75,10 @@ rxk_NewSocketHost(afs_uint32 ahost, short aport) - return NULL; - } - -- kernel_setsockopt(sockp, SOL_IP, IP_MTU_DISCOVER, (char *)&pmtu, -- sizeof(pmtu)); -+ afs_linux_sock_set_mtu_discover(sockp, pmtu); -+ - #ifdef AFS_RXERRQ_ENV -- { -- int recverr = 1; -- kernel_setsockopt(sockp, SOL_IP, IP_RECVERR, (char *)&recverr, -- sizeof(recverr)); -- } -+ afs_linux_sock_set_recverr(sockp); - #endif - return (osi_socket *)sockp; - } --- -2.31.1 - diff --git a/0003-LINUX-5.8-do-not-set-name-field-in-backing_dev_info.patch b/0003-LINUX-5.8-do-not-set-name-field-in-backing_dev_info.patch deleted file mode 100644 index 83a7ac15b8fc..000000000000 --- a/0003-LINUX-5.8-do-not-set-name-field-in-backing_dev_info.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 2daa3a8f5771539203d9eb8c4e23b01ed7c65a16 Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 3 Jul 2020 10:34:42 -0600 -Subject: [PATCH 03/11] LINUX 5.8: do not set name field in backing_dev_info -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Linux-5.8-rc1 commit 'bdi: remove the name field in struct -backing_dev_info' (1cd925d5838) - -Do not set the name field in the backing_dev_info structure if it is -not available. Uses an existing config test - 'STRUCT_BACKING_DEV_INFO_HAS_NAME' - -Note the name field in the backing_dev_info structure was added in -Linux-2.6.32 - -Reviewed-on: https://gerrit.openafs.org/14248 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit d8ec294534fcdee77a2ccd297b4b167dc4d5573d) - -Change-Id: I3d9e18092db998a4c4f26bd63ee3b75383a53d4c -Reviewed-on: https://gerrit.openafs.org/14268 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Michael Laß <lass@mail.uni-paderborn.de> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_vfsops.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c -index 8bbb5f225..ca1d5c83b 100644 ---- a/src/afs/LINUX/osi_vfsops.c -+++ b/src/afs/LINUX/osi_vfsops.c -@@ -121,7 +121,9 @@ afs_fill_super(struct super_block *sb, void *data, int silent) - code = super_setup_bdi(sb); - if (code) - goto out; -+# if defined(STRUCT_BACKING_DEV_INFO_HAS_NAME) - sb->s_bdi->name = "openafs"; -+# endif - sb->s_bdi->ra_pages = 32; - #else - /* used for inodes backing_dev_info field, also */ --- -2.31.1 - diff --git a/0004-LINUX-5.8-use-lru_cache_add.patch b/0004-LINUX-5.8-use-lru_cache_add.patch deleted file mode 100644 index 26e84c2ab12b..000000000000 --- a/0004-LINUX-5.8-use-lru_cache_add.patch +++ /dev/null @@ -1,108 +0,0 @@ -From d1c503f83a2cf85c6fbf7aab24728a5f0787c54c Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 3 Jul 2020 10:35:06 -0600 -Subject: [PATCH 04/11] LINUX 5.8: use lru_cache_add -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -With Linux-5.8-rc1 commit 'mm: fold and remove lru_cache_add_anon() and -lru_cache_add_file()' (6058eaec), the lru_cache_add_file function is -removed since it was functionally equivalent to lru_cache_add. - -Replace lru_cache_add_file with lru_cache_add. - -Introduce a new autoconf test to determine if lru_cache_add is present - -For reference, the Linux changes associated with the lru caches: - - __pagevec_lru_add introduced before v2.6.12-rc2 - - lru_cache_add_file introduced in v2.6.28-rc1 - __pagevec_lru_add_file replaces __pagevec_lru_add in v2.6.28-rc1 - vmscan: split LRU lists into anon & file sets (4f98a2fee) - - __pagevec_lru_add removed in v5.7 with a note to use lru_cache_add_file - mm/swap.c: not necessary to export __pagevec_lru_add() (bde07cfc6) - - lru_cache_add_file removed in v5.8 - mm: fold and remove lru_cache_add_anon() and lru_cache_add_file() - (6058eaec) - lru_cache_add exported - mm: fold and remove lru_cache_add_anon() and lru_cache_add_file() - (6058eaec) - -Openafs will use: - lru_cache_add on 5.8 kernels - lru_cache_add_file from 2.6.28 through 5.7 kernels - __pagevec_lru_add/__pagevec_lru_add_file on pre 2.6.28 kernels - -Reviewed-on: https://gerrit.openafs.org/14249 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Yadavendra Yadav <yadayada@in.ibm.com> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit 7d85ce221d6ccc19cf76ce7680c74311e4ed2632) - -Change-Id: Iba6ef4441687dbf60d227a708e2a032c2c0dc79f -Reviewed-on: https://gerrit.openafs.org/14269 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Michael Laß <lass@mail.uni-paderborn.de> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_vnodeops.c | 8 +++++++- - src/cf/linux-kernel-func.m4 | 7 +++++++ - 2 files changed, 14 insertions(+), 1 deletion(-) - -diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c -index 00995b27a..36a4f685e 100644 ---- a/src/afs/LINUX/osi_vnodeops.c -+++ b/src/afs/LINUX/osi_vnodeops.c -@@ -71,7 +71,7 @@ extern struct vcache *afs_globalVp; - - /* Handle interfacing with Linux's pagevec/lru facilities */ - --#if defined(HAVE_LINUX_LRU_CACHE_ADD_FILE) -+#if defined(HAVE_LINUX_LRU_CACHE_ADD_FILE) || defined(HAVE_LINUX_LRU_CACHE_ADD) - - /* - * Linux's lru_cache_add_file provides a simplified LRU interface without -@@ -90,7 +90,13 @@ afs_lru_cache_init(struct afs_lru_pages *alrupages) - static inline void - afs_lru_cache_add(struct afs_lru_pages *alrupages, struct page *page) - { -+# if defined(HAVE_LINUX_LRU_CACHE_ADD) -+ lru_cache_add(page); -+# elif defined(HAVE_LINUX_LRU_CACHE_ADD_FILE) - lru_cache_add_file(page); -+# else -+# error need a kernel function to add a page to the kernel lru cache -+# endif - } - - static inline void -diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4 -index 78ff48294..11d071806 100644 ---- a/src/cf/linux-kernel-func.m4 -+++ b/src/cf/linux-kernel-func.m4 -@@ -147,10 +147,17 @@ AC_CHECK_LINUX_FUNC([inode_lock], - [inode_lock(NULL);]) - - dnl lru_cache_add_file added to Linux 2.6.28. -+dnl removed in Linux 5.8 - AC_CHECK_LINUX_FUNC([lru_cache_add_file], - [#include <linux/swap.h>], - [lru_cache_add_file(NULL);]) - -+dnl lru_cache_add exported in Linux 5.8 -+dnl replaces lru_cache_add_file -+AC_CHECK_LINUX_FUNC([lru_cache_add], -+ [#include <linux/swap.h>], -+ [lru_cache_add(NULL);]) -+ - dnl Linux 5.8 replaced kernel_setsockopt with helper functions - dnl e.g. ip_sock_set_mtu_discover, ip_sock_set_recverr - AC_CHECK_LINUX_FUNC([ip_sock_set], --- -2.31.1 - diff --git a/0005-LINUX-5.9-Remove-HAVE_UNLOCKED_IOCTL-COMPAT_IOCTL.patch b/0005-LINUX-5.9-Remove-HAVE_UNLOCKED_IOCTL-COMPAT_IOCTL.patch deleted file mode 100644 index 6a3890f5ad40..000000000000 --- a/0005-LINUX-5.9-Remove-HAVE_UNLOCKED_IOCTL-COMPAT_IOCTL.patch +++ /dev/null @@ -1,169 +0,0 @@ -From c3b7278663c0e88daa611e7c1cc250e63639a496 Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 21 Aug 2020 10:37:51 -0600 -Subject: [PATCH 05/11] LINUX 5.9: Remove HAVE_UNLOCKED_IOCTL/COMPAT_IOCTL - -Linux-5.9-rc1 commit 'fs: remove the HAVE_UNLOCKED_IOCTL and -HAVE_COMPAT_IOCTL defines' (4e24566a) removed the two referenced macros -from the kernel. - -The support for unlocked_ioctl and compat_ioctl were introduced in -Linux 2.6.11. - -Remove references to HAVE_UNLOCKED_IOCTL and HAVE_COMPAT_IOCTL using -the assumption that they were always defined. - -Notes: - -With this change, building against kernels 2.6.10 and older will fail. -RHEL4 (EOL in March 2017) used a 2.6.9 kernel. RHEL5 uses a 2.6.18 -kernel. - -In linux-2.6.33-rc1 the commit messages for "staging: comedi: -Remove check for HAVE_UNLOCKED_IOCTL" (00a1855c) and "Staging: comedi: -remove check for HAVE_COMPAT_IOCTL" (5d7ae225) both state that all new -kernels have support for unlocked_ioctl/compat_ioctl so the checks can -be removed along with removing support for older kernels. - -Reviewed-on: https://gerrit.openafs.org/14300 -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -Tested-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit 13a49aaf0d5c43bce08135edaabb65587e1a8031) - -Change-Id: I6dc5ae5b32031641f4a021a31630390a91d834fe -Reviewed-on: https://gerrit.openafs.org/14315 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_ioctl.c | 25 ++----------------------- - src/afs/LINUX/osi_vnodeops.c | 14 -------------- - 2 files changed, 2 insertions(+), 37 deletions(-) - -diff --git a/src/afs/LINUX/osi_ioctl.c b/src/afs/LINUX/osi_ioctl.c -index 1646a1518..9ba076a1b 100644 ---- a/src/afs/LINUX/osi_ioctl.c -+++ b/src/afs/LINUX/osi_ioctl.c -@@ -25,10 +25,6 @@ - #include <asm/ia32_unistd.h> - #endif - --#if defined(AFS_SPARC64_LINUX26_ENV) && defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) --#include <linux/ioctl32.h> --#endif -- - #include <linux/slab.h> - #include <linux/init.h> - #include <linux/sched.h> -@@ -37,9 +33,6 @@ - #include "osi_compat.h" - - extern struct proc_dir_entry *openafs_procfs; --#if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) --static int ioctl32_done; --#endif - - extern asmlinkage long - afs_syscall(long syscall, long parm1, long parm2, long parm3, long parm4); -@@ -85,12 +78,11 @@ afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, - } - } - --#if defined(HAVE_UNLOCKED_IOCTL) || defined(HAVE_COMPAT_IOCTL) - static long afs_unlocked_ioctl(struct file *file, unsigned int cmd, - unsigned long arg) { - return afs_ioctl(FILE_INODE(file), file, cmd, arg); - } --#endif -+ - #if defined(HAVE_LINUX_STRUCT_PROC_OPS) - static struct proc_ops afs_syscall_ops = { - .proc_ioctl = afs_unlocked_ioctl, -@@ -100,16 +92,11 @@ static struct proc_ops afs_syscall_ops = { - }; - #else - static struct file_operations afs_syscall_ops = { --# ifdef HAVE_UNLOCKED_IOCTL - .unlocked_ioctl = afs_unlocked_ioctl, --# else -- .ioctl = afs_ioctl, --# endif --# ifdef HAVE_COMPAT_IOCTL - .compat_ioctl = afs_unlocked_ioctl, --# endif - }; - #endif /* HAVE_LINUX_STRUCT_PROC_OPS */ -+ - void - osi_ioctl_init(void) - { -@@ -121,18 +108,10 @@ osi_ioctl_init(void) - entry->owner = THIS_MODULE; - #endif - --#if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) -- if (register_ioctl32_conversion(VIOC_SYSCALL32, NULL) == 0) -- ioctl32_done = 1; --#endif - } - - void - osi_ioctl_clean(void) - { - remove_proc_entry(PROC_SYSCALL_NAME, openafs_procfs); --#if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) -- if (ioctl32_done) -- unregister_ioctl32_conversion(VIOC_SYSCALL32); --#endif - } -diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c -index 36a4f685e..ba4f1e6af 100644 ---- a/src/afs/LINUX/osi_vnodeops.c -+++ b/src/afs/LINUX/osi_vnodeops.c -@@ -589,13 +589,11 @@ out1: - extern int afs_xioctl(struct inode *ip, struct file *fp, unsigned int com, - unsigned long arg); - --#if defined(HAVE_UNLOCKED_IOCTL) || defined(HAVE_COMPAT_IOCTL) - static long afs_unlocked_xioctl(struct file *fp, unsigned int com, - unsigned long arg) { - return afs_xioctl(FILE_INODE(fp), fp, com, arg); - - } --#endif - - - static int -@@ -891,14 +889,8 @@ struct file_operations afs_dir_fops = { - #else - .readdir = afs_linux_readdir, - #endif --#ifdef HAVE_UNLOCKED_IOCTL - .unlocked_ioctl = afs_unlocked_xioctl, --#else -- .ioctl = afs_xioctl, --#endif --#ifdef HAVE_COMPAT_IOCTL - .compat_ioctl = afs_unlocked_xioctl, --#endif - .open = afs_linux_open, - .release = afs_linux_release, - .llseek = default_llseek, -@@ -926,14 +918,8 @@ struct file_operations afs_file_fops = { - .read = afs_linux_read, - .write = afs_linux_write, - #endif --#ifdef HAVE_UNLOCKED_IOCTL - .unlocked_ioctl = afs_unlocked_xioctl, --#else -- .ioctl = afs_xioctl, --#endif --#ifdef HAVE_COMPAT_IOCTL - .compat_ioctl = afs_unlocked_xioctl, --#endif - .mmap = afs_linux_mmap, - .open = afs_linux_open, - .flush = afs_linux_flush, --- -2.31.1 - diff --git a/0006-LINUX-Fix-includes-for-fatal_signal_pending-test.patch b/0006-LINUX-Fix-includes-for-fatal_signal_pending-test.patch deleted file mode 100644 index e1bbb742e1f6..000000000000 --- a/0006-LINUX-Fix-includes-for-fatal_signal_pending-test.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 95a8c71f80e6d0aa83297fedf9f808ee01c32623 Mon Sep 17 00:00:00 2001 -From: Andrew Deason <adeason@sinenomine.net> -Date: Thu, 28 Jan 2021 16:59:47 -0600 -Subject: [PATCH 06/11] LINUX: Fix includes for fatal_signal_pending test - -Commit 8b6ae289 (LINUX: Avoid lookup ENOENT on fatal signals) added a -configure test for fatal_signal_pending(). However, this check fails -incorrectly ever since Linux 4.11, because fatal_signal_pending() was moved -from linux/sched.h to linux/sched/signal.h in Linux commit 2a1f062a -(sched/headers: Move signal wakeup [...]). Fix this by including -linux/sched/signal.h if we have it during the configure test. - -A false negative on this configure test doesn't break the build, but -it disables one of our safeguards preventing incorrect negative -dentries at runtime. The function fatal_signal_pending() hasn't -changed in quite some time (except for what header it lives in); it -was introduced in Linux 2.6.25 via Linux commit f776d12d (Add -fatal_signal_pending). So to try to avoid this mistake again in the -future, make it so a missing fatal_signal_pending() breaks the build -if we're on Linux 2.6.25+. - -Reviewed-on: https://gerrit.openafs.org/14508 -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -(cherry picked from commit 0c1465e4f3310daa54f1e799f76237604222666d) - -Change-Id: I1334c060f8ab5733461ebf7c191dffa7be830021 -Reviewed-on: https://gerrit.openafs.org/14509 -Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> -Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_vnodeops.c | 2 ++ - src/cf/linux-kernel-func.m4 | 7 ++++++- - 2 files changed, 8 insertions(+), 1 deletion(-) - -diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c -index ba4f1e6af..4d0f55c95 100644 ---- a/src/afs/LINUX/osi_vnodeops.c -+++ b/src/afs/LINUX/osi_vnodeops.c -@@ -1206,6 +1206,8 @@ filter_enoent(int code) - if (code == ENOENT && fatal_signal_pending(current)) { - return EINTR; - } -+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) -+# error fatal_signal_pending not available, but it should be - #endif - return code; - } -diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4 -index 11d071806..e45a30540 100644 ---- a/src/cf/linux-kernel-func.m4 -+++ b/src/cf/linux-kernel-func.m4 -@@ -42,8 +42,13 @@ AC_CHECK_LINUX_FUNC([d_make_root], - AC_CHECK_LINUX_FUNC([do_sync_read], - [#include <linux/fs.h>], - [do_sync_read(NULL, NULL, 0, NULL);]) -+dnl - fatal_signal_pending introduced in 2.6.25 -+dnl - moved from linux/sched.h to linux/sched/signal.h in 4.11 - AC_CHECK_LINUX_FUNC([fatal_signal_pending], -- [#include <linux/sched.h>], -+ [#include <linux/sched.h> -+ #ifdef HAVE_LINUX_SCHED_SIGNAL_H -+ # include <linux/sched/signal.h> -+ #endif], - [fatal_signal_pending(NULL);]) - AC_CHECK_LINUX_FUNC([file_dentry], - [#include <linux/fs.h>], --- -2.31.1 - diff --git a/0007-Linux-Refactor-test-for-32bit-compat.patch b/0007-Linux-Refactor-test-for-32bit-compat.patch deleted file mode 100644 index 2b3cc10561fd..000000000000 --- a/0007-Linux-Refactor-test-for-32bit-compat.patch +++ /dev/null @@ -1,212 +0,0 @@ -From 7efd65a984e5b50904e556992f533c460d9fcf9e Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 29 Jan 2021 11:32:36 -0700 -Subject: [PATCH 07/11] Linux: Refactor test for 32bit compat - -Refactor the preprocessor checks for determining the method to test for -32bit compatibility (64bit kernel performing work for a 32bit task) into -a common inline function, 'afs_in_compat_syscall' that is defined in -LINUX/osi_machdep.h. Update osi_ioctl.c and afs_syscall.c to use -afs_in_compat_syscall. - -Add include afs/sysincludes into osi_machdep.h to ensure linux/compat.h -is pulled for the functions called in afs_in_compat_syscall. - -Reviewed-on: https://gerrit.openafs.org/14500 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit 32cc6b0796495e596262d84c428172a511f757c4) - -Change-Id: I746e5777737d49381c4a74627b79d2a61cbd4f8e -Reviewed-on: https://gerrit.openafs.org/14510 -Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_ioctl.c | 14 ++------ - src/afs/LINUX/osi_machdep.h | 40 +++++++++++++++++++++ - src/afs/afs_syscall.c | 70 +++---------------------------------- - 3 files changed, 47 insertions(+), 77 deletions(-) - -diff --git a/src/afs/LINUX/osi_ioctl.c b/src/afs/LINUX/osi_ioctl.c -index 9ba076a1b..7d355674d 100644 ---- a/src/afs/LINUX/osi_ioctl.c -+++ b/src/afs/LINUX/osi_ioctl.c -@@ -43,21 +43,13 @@ afs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, - { - - struct afsprocdata sysargs; --#ifdef NEED_IOCTL32 -- struct afsprocdata32 sysargs32; --#endif - - if (cmd != VIOC_SYSCALL && cmd != VIOC_SYSCALL32) return -EINVAL; - - #ifdef NEED_IOCTL32 --# if defined(AFS_S390X_LINUX26_ENV) -- if (test_thread_flag(TIF_31BIT)) --# elif defined(AFS_AMD64_LINUX20_ENV) -- if (test_thread_flag(TIF_IA32)) --# else -- if (test_thread_flag(TIF_32BIT)) --# endif /* AFS_S390X_LINUX26_ENV */ -- { -+ if (afs_in_compat_syscall()) { -+ struct afsprocdata32 sysargs32; -+ - if (copy_from_user(&sysargs32, (void *)arg, - sizeof(struct afsprocdata32))) - return -EFAULT; -diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h -index 784829627..9ecdaf0bf 100644 ---- a/src/afs/LINUX/osi_machdep.h -+++ b/src/afs/LINUX/osi_machdep.h -@@ -76,6 +76,8 @@ - #include "h/cred.h" - #endif - -+#include "afs/sysincludes.h" -+ - #if !defined(HAVE_LINUX_TIME_T) - typedef time64_t time_t; - #endif -@@ -157,6 +159,44 @@ static inline long copyinstr(char *from, char *to, int count, int *length) { - } - #define copyout(F, T, C) (copy_to_user ((char*)(T), (char*)(F), (C)) > 0 ? EFAULT : 0) - -+/* -+ * Test to see for 64/32bit compatibility mode -+ * Return non-zero if in a 64bit kernel and handing a 32bit syscall -+ */ -+#if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) -+static inline int -+afs_in_compat_syscall(void) -+{ -+# if defined(AFS_SPARC64_LINUX26_ENV) -+ return test_thread_flag(TIF_32BIT); -+# elif defined(AFS_SPARC64_LINUX24_ENV) -+ return (current->thread.flags & SPARC_FLAG_32BIT) != 0; -+# elif defined(AFS_SPARC64_LINUX20_ENV) -+ return (current->tss.flags & SPARC_FLAG_32BIT) != 0; -+# elif defined(AFS_AMD64_LINUX26_ENV) -+ return test_thread_flag(TIF_IA32); -+# elif defined(AFS_AMD64_LINUX20_ENV) -+ return (current->thread.flags & THREAD_IA32) != 0; -+# elif defined(AFS_PPC64_LINUX26_ENV) -+# if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) -+ return (current->thread_info->flags & _TIF_32BIT) != 0; -+# else -+ return (task_thread_info(current)->flags & _TIF_32BIT) != 0; -+# endif -+# elif defined(AFS_PPC64_LINUX20_ENV) -+ return (current->thread.flags & PPC_FLAG_32BIT) != 0; -+# elif defined(AFS_S390X_LINUX26_ENV) -+ return test_thread_flag(TIF_31BIT); -+# elif defined(AFS_S390X_LINUX20_ENV) -+ return (current->thread.flags & S390_FLAG_31BIT) != 0; -+# elif defined(AFS_ARM64_LINUX26_ENV) -+ return is_compat_task(); -+# else -+# error afs_in_compat_syscall not done for this linux -+# endif -+} -+#endif /* AFS_LINUX_64BIT_KERNEL */ -+ - /* kernel print statements */ - #define printf(args...) printk(args) - #define uprintf(args...) printk(args) -diff --git a/src/afs/afs_syscall.c b/src/afs/afs_syscall.c -index ce6afdf9a..9414f38b8 100644 ---- a/src/afs/afs_syscall.c -+++ b/src/afs/afs_syscall.c -@@ -114,40 +114,9 @@ copyin_afs_ioctl(caddr_t cmarg, struct afs_ioctl *dst) - #endif /* defined(AFS_SGI_ENV) && (_MIPS_SZLONG==64) */ - - #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) -- struct afs_ioctl32 dst32; -- --#ifdef AFS_SPARC64_LINUX26_ENV -- if (test_thread_flag(TIF_32BIT)) --#elif defined(AFS_SPARC64_LINUX24_ENV) -- if (current->thread.flags & SPARC_FLAG_32BIT) --#elif defined(AFS_SPARC64_LINUX20_ENV) -- if (current->tss.flags & SPARC_FLAG_32BIT) -- --#elif defined(AFS_AMD64_LINUX26_ENV) -- if (test_thread_flag(TIF_IA32)) --#elif defined(AFS_AMD64_LINUX20_ENV) -- if (current->thread.flags & THREAD_IA32) -- --#elif defined(AFS_PPC64_LINUX26_ENV) --#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) -- if (current->thread_info->flags & _TIF_32BIT) --#else -- if (task_thread_info(current)->flags & _TIF_32BIT) --#endif --#elif defined(AFS_PPC64_LINUX20_ENV) -- if (current->thread.flags & PPC_FLAG_32BIT) -- --#elif defined(AFS_S390X_LINUX26_ENV) -- if (test_thread_flag(TIF_31BIT)) --#elif defined(AFS_S390X_LINUX20_ENV) -- if (current->thread.flags & S390_FLAG_31BIT) --#elif defined(AFS_ARM64_LINUX26_ENV) -- if (is_compat_task()) -+ if (afs_in_compat_syscall()) { -+ struct afs_ioctl32 dst32; - --#else --#error pioctl32 not done for this linux --#endif -- { - AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); - if (!code) - afs_ioctl32_to_afs_ioctl(&dst32, dst); -@@ -391,40 +360,9 @@ copyin_iparam(caddr_t cmarg, struct iparam *dst) - #endif /* AFS_SUN5_64BIT_ENV */ - - #if defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV) -- struct iparam32 dst32; -- --#ifdef AFS_SPARC64_LINUX26_ENV -- if (test_thread_flag(TIF_32BIT)) --#elif defined(AFS_SPARC64_LINUX24_ENV) -- if (current->thread.flags & SPARC_FLAG_32BIT) --#elif defined(AFS_SPARC64_LINUX20_ENV) -- if (current->tss.flags & SPARC_FLAG_32BIT) -- --#elif defined(AFS_AMD64_LINUX26_ENV) -- if (test_thread_flag(TIF_IA32)) --#elif defined(AFS_AMD64_LINUX20_ENV) -- if (current->thread.flags & THREAD_IA32) -- --#elif defined(AFS_PPC64_LINUX26_ENV) --#if defined(STRUCT_TASK_STRUCT_HAS_THREAD_INFO) -- if (current->thread_info->flags & _TIF_32BIT) --#else -- if (task_thread_info(current)->flags & _TIF_32BIT) --#endif --#elif defined(AFS_PPC64_LINUX20_ENV) -- if (current->thread.flags & PPC_FLAG_32BIT) -- --#elif defined(AFS_S390X_LINUX26_ENV) -- if (test_thread_flag(TIF_31BIT)) --#elif defined(AFS_S390X_LINUX20_ENV) -- if (current->thread.flags & S390_FLAG_31BIT) --#elif defined(AFS_ARM64_LINUX26_ENV) -- if (is_compat_task()) -+ if (afs_in_compat_syscall()) { -+ struct iparam32 dst32; - --#else --#error iparam32 not done for this linux platform --#endif -- { - AFS_COPYIN(cmarg, (caddr_t) & dst32, sizeof dst32, code); - if (!code) - iparam32_to_iparam(&dst32, dst); --- -2.31.1 - diff --git a/0008-Linux-5.11-Test-32bit-compat-with-in_compat_syscall.patch b/0008-Linux-5.11-Test-32bit-compat-with-in_compat_syscall.patch deleted file mode 100644 index 75dec912f6bc..000000000000 --- a/0008-Linux-5.11-Test-32bit-compat-with-in_compat_syscall.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 2d85a5b7a1011386d66cc36512a54e80b6cfa515 Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 22 Jan 2021 07:57:55 -0700 -Subject: [PATCH 08/11] Linux 5.11: Test 32bit compat with in_compat_syscall - -Linux 5.11 removed the TIF_IA32 thread flag with commit: - x86: Reclaim TIF_IA32 and TIF_X32 (8d71d2bf6efec) - -The flag TIF_IA32 was being used by openafs to determine if the task was -handling a syscall request from a 32 bit process. Building against a -Linux 5.11 kernel results in a build failure as TIF_IA32 is undefined. - -The function 'in_compat_syscall' was introduced in Linux 4.6 as -the preferred method to determine if a syscall needed to handle a -compatible call (e.g. 32bit application). - -To resolve the build problem, use 'in_compat_syscall' if present (Linux -4.6 and later) to determine if the syscall needs to handle a -compatibility mode call. - -Add autoconf check for in_compat_syscall. - -Notes about in_compat_syscall: - -In Linux 4.6 'in_compat_syscall' was defined for all architectures with -a generic return of 'is_compat_task', but allows architecture specific -overriding implementations (x86 and sparc). - -At 4.6 (and later), the function 'is_compat_task' is defined only for -the following architectures to return: - -Arch Returns -======= ============================== -arm64 test_thread_flag(TIF_32BIT); -mips test_thread_flag(TIF_32BIT_ADDR) -parisc test_ti_thread_flag(task_thread_info(t), TIF_32BIT) -powerpc is_32bit_task() -s390 test_thread_flag(TIF_31BIT) -sparc test_thread_flag(TIF_32BIT) - -If the Linux kernel is not built with compat mode, is_compat_task and -in_compat_syscall is set to always return 0 - -Linux commit that introduced in_compat_syscall: - compat: add in_compat_syscall to ask whether we're in a compat syscall - (5180e3e24fd3e8e7) - -Reviewed-on: https://gerrit.openafs.org/14499 -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -(cherry picked from commit 78ef922612bef5f5fd6904896e84b9d2ea802404) - -Change-Id: I4eca62f19ae58fd830915feff5098cec2825f099 -Reviewed-on: https://gerrit.openafs.org/14511 -Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> -Tested-by: Cheyenne Wills <cwills@sinenomine.net> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_machdep.h | 4 +++- - src/cf/linux-kernel-func.m4 | 6 ++++++ - 2 files changed, 9 insertions(+), 1 deletion(-) - -diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h -index 9ecdaf0bf..066c1885f 100644 ---- a/src/afs/LINUX/osi_machdep.h -+++ b/src/afs/LINUX/osi_machdep.h -@@ -167,7 +167,9 @@ static inline long copyinstr(char *from, char *to, int count, int *length) { - static inline int - afs_in_compat_syscall(void) - { --# if defined(AFS_SPARC64_LINUX26_ENV) -+# if defined(HAVE_LINUX_IN_COMPAT_SYSCALL) -+ return in_compat_syscall(); -+# elif defined(AFS_SPARC64_LINUX26_ENV) - return test_thread_flag(TIF_32BIT); - # elif defined(AFS_SPARC64_LINUX24_ENV) - return (current->thread.flags & SPARC_FLAG_32BIT) != 0; -diff --git a/src/cf/linux-kernel-func.m4 b/src/cf/linux-kernel-func.m4 -index e45a30540..5b4060238 100644 ---- a/src/cf/linux-kernel-func.m4 -+++ b/src/cf/linux-kernel-func.m4 -@@ -157,6 +157,12 @@ AC_CHECK_LINUX_FUNC([lru_cache_add_file], - [#include <linux/swap.h>], - [lru_cache_add_file(NULL);]) - -+dnl Linux 4.6 introduced in_compat_syscall as replacement for is_compat_task -+dnl for certain platforms. -+AC_CHECK_LINUX_FUNC([in_compat_syscall], -+ [#include <linux/compat.h>], -+ [in_compat_syscall();]) -+ - dnl lru_cache_add exported in Linux 5.8 - dnl replaces lru_cache_add_file - AC_CHECK_LINUX_FUNC([lru_cache_add], --- -2.31.1 - diff --git a/0009-LINUX-Introduce-afs_d_path.patch b/0009-LINUX-Introduce-afs_d_path.patch deleted file mode 100644 index e289942fd807..000000000000 --- a/0009-LINUX-Introduce-afs_d_path.patch +++ /dev/null @@ -1,67 +0,0 @@ -From e4d3ce24f759d6f099b5523fd34501b496fb88a5 Mon Sep 17 00:00:00 2001 -From: Andrew Deason <adeason@sinenomine.net> -Date: Tue, 23 Jul 2019 13:50:31 -0500 -Subject: [PATCH 09/11] LINUX: Introduce afs_d_path - -Move our preprocessor logic around d_path into an osi_compat.h -wrapper, called afs_d_path. This just makes it a little easier to use -d_path, and moves a tiny bit of #ifdef cruft away from real code. - -Reviewed-on: https://gerrit.openafs.org/13721 -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -(cherry picked from commit 4c4fb6e36634e5663c8be25acd4a1ac872e4738c) - -Change-Id: I08763c71006e4ac6f2bf88d8ac71941fc44e6ab8 -Reviewed-on: https://gerrit.openafs.org/14563 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_compat.h | 11 +++++++++++ - src/afs/LINUX/osi_misc.c | 8 +------- - 2 files changed, 12 insertions(+), 7 deletions(-) - -diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h -index 620b3730c..a1e7f21fb 100644 ---- a/src/afs/LINUX/osi_compat.h -+++ b/src/afs/LINUX/osi_compat.h -@@ -737,4 +737,15 @@ afs_file_write(struct file *filp, char __user *buf, size_t len, loff_t *pos) - #endif - } - -+static inline char* -+afs_d_path(struct dentry *dp, struct vfsmount *mnt, char *buf, int buflen) -+{ -+#ifdef D_PATH_TAKES_STRUCT_PATH -+ afs_linux_path_t p = { .mnt = mnt, .dentry = dp }; -+ return d_path(&p, buf, buflen); -+#else -+ return d_path(dp, mnt, buf, buflen); -+#endif -+} -+ - #endif /* AFS_LINUX_OSI_COMPAT_H */ -diff --git a/src/afs/LINUX/osi_misc.c b/src/afs/LINUX/osi_misc.c -index 0e9336db6..aa5d5fc93 100644 ---- a/src/afs/LINUX/osi_misc.c -+++ b/src/afs/LINUX/osi_misc.c -@@ -138,13 +138,7 @@ int osi_abspath(char *aname, char *buf, int buflen, - return -PTR_ERR(name); - code = osi_lookupname_internal(name, followlink, &mnt, &dp); - if (!code) { --#if defined(D_PATH_TAKES_STRUCT_PATH) -- afs_linux_path_t p = { .mnt = mnt, .dentry = dp }; -- path = d_path(&p, buf, buflen); --#else -- path = d_path(dp, mnt, buf, buflen); --#endif -- -+ path = afs_d_path(dp, mnt, buf, buflen); - if (IS_ERR(path)) { - code = -PTR_ERR(path); - } else { --- -2.31.1 - diff --git a/0010-Linux-Create-wrapper-for-setattr_prepare.patch b/0010-Linux-Create-wrapper-for-setattr_prepare.patch deleted file mode 100644 index fe75325bc8a9..000000000000 --- a/0010-Linux-Create-wrapper-for-setattr_prepare.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 06c067eb25fafd8d18de204a3df430e114fc8871 Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Mon, 8 Mar 2021 09:22:04 -0700 -Subject: [PATCH 10/11] Linux: Create wrapper for setattr_prepare - -Move call to setattr_prepare/inode_change_ok into an osi_compat.h -wrapper called 'afs_setattr_prepare'. This moves some of the #if logic -out of the mainline code. - -Reviewed-on: https://gerrit.openafs.org/14548 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -(cherry picked from commit 12ae2beeeb172cebdfa24d5ea149f73fd85541f8) - -Change-Id: I1c7806893daf2404a8b3ac1b5c88ca04e6409226 -Reviewed-on: https://gerrit.openafs.org/14564 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_compat.h | 10 ++++++++++ - src/afs/LINUX/osi_file.c | 6 +----- - 2 files changed, 11 insertions(+), 5 deletions(-) - -diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h -index a1e7f21fb..3ac4d798d 100644 ---- a/src/afs/LINUX/osi_compat.h -+++ b/src/afs/LINUX/osi_compat.h -@@ -748,4 +748,14 @@ afs_d_path(struct dentry *dp, struct vfsmount *mnt, char *buf, int buflen) - #endif - } - -+static inline int -+afs_setattr_prepare(struct dentry *dp, struct iattr *newattrs) -+{ -+#if defined(HAVE_LINUX_SETATTR_PREPARE) -+ return setattr_prepare(dp, newattrs); -+#else -+ return inode_change_ok(dp->d_inode, newattrs); -+#endif -+} -+ - #endif /* AFS_LINUX_OSI_COMPAT_H */ -diff --git a/src/afs/LINUX/osi_file.c b/src/afs/LINUX/osi_file.c -index 5b0a0c01d..982cf47e7 100644 ---- a/src/afs/LINUX/osi_file.c -+++ b/src/afs/LINUX/osi_file.c -@@ -205,11 +205,7 @@ osi_UFSTruncate(struct osi_file *afile, afs_int32 asize) - AFS_CURRENT_TIME(&newattrs.ia_ctime); - - /* avoid notify_change() since it wants to update dentry->d_parent */ --#ifdef HAVE_LINUX_SETATTR_PREPARE -- code = setattr_prepare(file_dentry(afile->filp), &newattrs); --#else -- code = inode_change_ok(inode, &newattrs); --#endif -+ code = afs_setattr_prepare(file_dentry(afile->filp), &newattrs); - if (!code) - code = afs_inode_setattr(afile, &newattrs); - if (!code) --- -2.31.1 - diff --git a/0011-Linux-5.12-Add-user_namespace-param-to-inode-ops.patch b/0011-Linux-5.12-Add-user_namespace-param-to-inode-ops.patch deleted file mode 100644 index 001f1782df22..000000000000 --- a/0011-Linux-5.12-Add-user_namespace-param-to-inode-ops.patch +++ /dev/null @@ -1,289 +0,0 @@ -From 1a5b57363724d221a9065bbb10f817485d0a8bc3 Mon Sep 17 00:00:00 2001 -From: Cheyenne Wills <cwills@sinenomine.net> -Date: Fri, 5 Mar 2021 16:31:03 -0700 -Subject: [PATCH 11/11] Linux 5.12: Add user_namespace param to inode ops - -The Linux commits: -"fs: make helpers idmap mount aware" (549c72977) and -"attr: handle idmapped mounts" (2f221d6f7) that were merged into -Linux-5.12-rc1 cause a build failure when creating the kernel module. - -Several functions within the inode_operations structure had their -signature updated to include a user_namespace parameter. This allows -a filesystem to support idmapped mounts. - -OpenAFS only implements some of the changed functions. - - LINUX/vnodeops function inode_operation - ===================== =============== - afs_notify_change setattr - afs_linux_getattr getattr - afs_linux_create create - afs_linux_symlink symlink - afs_linux_mkdir mkdir - afs_linux_rename rename - afs_linux_permission permission - -Update the autoconf tests to determine if the Linux kernel requires -the user_namespace structure for inode_operations functions. If so, -define a generic "IOP_TAKES_USER_NAMESPACE" macro. - -Update the above vnodeops functions to accept a 'struct user_namespace' -parameter. - -When using the 'setattr_prepare' function a user namespace must be -now provided. In order to provide compatibility as a non-idmapped mount -filesystem the initial user namespace can be used. With OpenAFS, the -initial user namespace obtained at kernel module load time is stored in -a global variable 'afs_ns'. - -Update the call to setattr_prepare to pass the user namespace pointed -to by the 'afs_ns' global variable. - -Update calls to setattr to pass the user namespace pointed to by -the 'afs_ns' global variable. - -Notes: - -The changes introduced with Linux 5.12 allow a filesystem to support -idmapped mounts if desired. This commit does not implement support for -idmapped mounts, but will continue to use the same initial user -namespace as prior to Linux 5.12. - -With Linux 5.12 the following autoconf checks fail: - - HAVE_LINUX_INODE_OPERATIONS_RENAME_TAKES_FLAGS - HAVE_LINUX_SETATTR_PREPARE - IOP_CREATE_TAKES_BOOL - IOP_GETATTR_TAKES_PATH_STRUCT - IOP_MKDIR_TAKES_UMODE_T - -The new macro 'IOP_TAKES_USER_NAMESPACE' covers the cases where these -macros where used. - -Reviewed-on: https://gerrit.openafs.org/14549 -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> -Tested-by: BuildBot <buildbot@rampaginggeek.com> -(cherry picked from commit 1bd68506be3243c5670aaf53798b2e4e715d4c8b) - -Change-Id: I8cd54042da4e0295f3cf8417c84138bb0458f881 -Reviewed-on: https://gerrit.openafs.org/14565 -Tested-by: BuildBot <buildbot@rampaginggeek.com> -Reviewed-by: Cheyenne Wills <cwills@sinenomine.net> -Reviewed-by: Andrew Deason <adeason@sinenomine.net> -Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> ---- - src/afs/LINUX/osi_compat.h | 8 +++-- - src/afs/LINUX/osi_vnodeops.c | 69 +++++++++++++++++++++++++++++++----- - src/cf/linux-kernel-sig.m4 | 16 ++++++++- - 3 files changed, 81 insertions(+), 12 deletions(-) - -diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h -index 3ac4d798d..726b6559c 100644 ---- a/src/afs/LINUX/osi_compat.h -+++ b/src/afs/LINUX/osi_compat.h -@@ -524,7 +524,9 @@ afs_inode_setattr(struct osi_file *afile, struct iattr *newattrs) { - - int code = 0; - struct inode *inode = OSIFILE_INODE(afile); --#if !defined(HAVE_LINUX_INODE_SETATTR) -+#if defined(IOP_TAKES_USER_NAMESPACE) -+ code = inode->i_op->setattr(afs_ns, afile->filp->f_dentry, newattrs); -+#elif !defined(HAVE_LINUX_INODE_SETATTR) - code = inode->i_op->setattr(afile->filp->f_dentry, newattrs); - #elif defined(INODE_SETATTR_NOT_VOID) - if (inode->i_op && inode->i_op->setattr) -@@ -751,7 +753,9 @@ afs_d_path(struct dentry *dp, struct vfsmount *mnt, char *buf, int buflen) - static inline int - afs_setattr_prepare(struct dentry *dp, struct iattr *newattrs) - { --#if defined(HAVE_LINUX_SETATTR_PREPARE) -+#if defined(IOP_TAKES_USER_NAMESPACE) -+ return setattr_prepare(afs_ns, dp, newattrs); -+#elif defined(HAVE_LINUX_SETATTR_PREPARE) - return setattr_prepare(dp, newattrs); - #else - return inode_change_ok(dp->d_inode, newattrs); -diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c -index 4d0f55c95..9d4a6e334 100644 ---- a/src/afs/LINUX/osi_vnodeops.c -+++ b/src/afs/LINUX/osi_vnodeops.c -@@ -1118,8 +1118,13 @@ vattr2inode(struct inode *ip, struct vattr *vp) - * Linux version of setattr call. What to change is in the iattr struct. - * We need to set bits in both the Linux inode as well as the vcache. - */ -+#if defined(IOP_TAKES_USER_NAMESPACE) -+static int -+afs_notify_change(struct user_namespace *mnt_userns, struct dentry *dp, struct iattr *iattrp) -+#else - static int - afs_notify_change(struct dentry *dp, struct iattr *iattrp) -+#endif - { - struct vattr *vattr = NULL; - cred_t *credp = crref(); -@@ -1147,7 +1152,18 @@ out: - return afs_convert_code(code); - } - --#if defined(IOP_GETATTR_TAKES_PATH_STRUCT) -+#if defined(IOP_TAKES_USER_NAMESPACE) -+static int -+afs_linux_getattr(struct user_namespace *mnt_userns, const struct path *path, struct kstat *stat, -+ u32 request_mask, unsigned int sync_mode) -+{ -+ int err = afs_linux_revalidate(path->dentry); -+ if (!err) { -+ generic_fillattr(afs_ns, path->dentry->d_inode, stat); -+ } -+ return err; -+} -+#elif defined(IOP_GETATTR_TAKES_PATH_STRUCT) - static int - afs_linux_getattr(const struct path *path, struct kstat *stat, u32 request_mask, unsigned int sync_mode) - { -@@ -1605,17 +1621,25 @@ struct dentry_operations afs_dentry_operations = { - * - * name is in kernel space at this point. - */ -+ -+#if defined(IOP_TAKES_USER_NAMESPACE) -+static int -+afs_linux_create(struct user_namespace *mnt_userns, struct inode *dip, -+ struct dentry *dp, umode_t mode, bool excl) -+#elif defined(IOP_CREATE_TAKES_BOOL) - static int --#if defined(IOP_CREATE_TAKES_BOOL) - afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode, - bool excl) - #elif defined(IOP_CREATE_TAKES_UMODE_T) -+static int - afs_linux_create(struct inode *dip, struct dentry *dp, umode_t mode, - struct nameidata *nd) - #elif defined(IOP_CREATE_TAKES_NAMEIDATA) -+static int - afs_linux_create(struct inode *dip, struct dentry *dp, int mode, - struct nameidata *nd) - #else -+static int - afs_linux_create(struct inode *dip, struct dentry *dp, int mode) - #endif - { -@@ -1890,8 +1914,14 @@ afs_linux_unlink(struct inode *dip, struct dentry *dp) - } - - -+#if defined(IOP_TAKES_USER_NAMESPACE) -+static int -+afs_linux_symlink(struct user_namespace *mnt_userns, struct inode *dip, -+ struct dentry *dp, const char *target) -+#else - static int - afs_linux_symlink(struct inode *dip, struct dentry *dp, const char *target) -+#endif - { - int code; - cred_t *credp = crref(); -@@ -1919,10 +1949,15 @@ out: - return afs_convert_code(code); - } - -+#if defined(IOP_TAKES_USER_NAMESPACE) -+static int -+afs_linux_mkdir(struct user_namespace *mnt_userns, struct inode *dip, -+ struct dentry *dp, umode_t mode) -+#elif defined(IOP_MKDIR_TAKES_UMODE_T) - static int --#if defined(IOP_MKDIR_TAKES_UMODE_T) - afs_linux_mkdir(struct inode *dip, struct dentry *dp, umode_t mode) - #else -+static int - afs_linux_mkdir(struct inode *dip, struct dentry *dp, int mode) - #endif - { -@@ -1994,13 +2029,22 @@ afs_linux_rmdir(struct inode *dip, struct dentry *dp) - } - - -+#if defined(IOP_TAKES_USER_NAMESPACE) -+static int -+afs_linux_rename(struct user_namespace *mnt_userns, -+ struct inode *oldip, struct dentry *olddp, -+ struct inode *newip, struct dentry *newdp, -+ unsigned int flags) -+#elif defined(HAVE_LINUX_INODE_OPERATIONS_RENAME_TAKES_FLAGS) -+static int -+afs_linux_rename(struct inode *oldip, struct dentry *olddp, -+ struct inode *newip, struct dentry *newdp, -+ unsigned int flags) -+#else - static int - afs_linux_rename(struct inode *oldip, struct dentry *olddp, -- struct inode *newip, struct dentry *newdp --#ifdef HAVE_LINUX_INODE_OPERATIONS_RENAME_TAKES_FLAGS -- , unsigned int flags -+ struct inode *newip, struct dentry *newdp) - #endif -- ) - { - int code; - cred_t *credp = crref(); -@@ -2008,7 +2052,8 @@ afs_linux_rename(struct inode *oldip, struct dentry *olddp, - const char *newname = newdp->d_name.name; - struct dentry *rehash = NULL; - --#ifdef HAVE_LINUX_INODE_OPERATIONS_RENAME_TAKES_FLAGS -+#if defined(HAVE_LINUX_INODE_OPERATIONS_RENAME_TAKES_FLAGS) || \ -+ defined(IOP_TAKES_USER_NAMESPACE) - if (flags) - return -EINVAL; /* no support for new flags yet */ - #endif -@@ -3030,12 +3075,18 @@ done: - /* afs_linux_permission - * Check access rights - returns error if can't check or permission denied. - */ -+ -+#if defined(IOP_TAKES_USER_NAMESPACE) -+static int -+afs_linux_permission(struct user_namespace *mnt_userns, struct inode *ip, int mode) -+#elif defined(IOP_PERMISSION_TAKES_FLAGS) - static int --#if defined(IOP_PERMISSION_TAKES_FLAGS) - afs_linux_permission(struct inode *ip, int mode, unsigned int flags) - #elif defined(IOP_PERMISSION_TAKES_NAMEIDATA) -+static int - afs_linux_permission(struct inode *ip, int mode, struct nameidata *nd) - #else -+static int - afs_linux_permission(struct inode *ip, int mode) - #endif - { -diff --git a/src/cf/linux-kernel-sig.m4 b/src/cf/linux-kernel-sig.m4 -index 3d3aff909..e0cc9a2f3 100644 ---- a/src/cf/linux-kernel-sig.m4 -+++ b/src/cf/linux-kernel-sig.m4 -@@ -14,4 +14,18 @@ AC_CHECK_LINUX_OPERATION([inode_operations], [rename], [takes_flags], - [struct inode *oinode, struct dentry *odentry, - struct inode *ninode, struct dentry *ndentry, - unsigned int flags]) --]) -+dnl Linux 5.12 added the user_namespace parameter to the several -+dnl inode operations functions. -+dnl Perform a generic test using the inode_op create to test for this change. -+AC_CHECK_LINUX_OPERATION([inode_operations], [create], [user_namespace], -+ [#include <linux/fs.h>], -+ [int], -+ [struct user_namespace *mnt_userns, -+ struct inode *inode, struct dentry *dentry, -+ umode_t umode, bool flag]) -+dnl if HAVE_LINUX_INODE_OPERATIONS_CREATE_USER_NAMESPACE, create a more generic -+dnl define. -+AS_IF([test AS_VAR_GET([ac_cv_linux_operation_inode_operations_create_user_namespace]) = yes], -+ [AC_DEFINE([IOP_TAKES_USER_NAMESPACE], 1, -+ [define if inodeops require struct user_namespace])]) -+]) -\ No newline at end of file --- -2.31.1 - @@ -6,8 +6,8 @@ pkgname=openafs-modules-dkms _srcname=openafs -pkgver=1.8.7 -pkgrel=3 +pkgver=1.8.8 +pkgrel=1 pkgdesc="Kernel module for OpenAFS (dkms)" arch=('i686' 'x86_64' 'armv7h') url="http://www.openafs.org" @@ -17,58 +17,15 @@ provides=("openafs-modules=$pkgver") conflicts=('openafs-features-libafs' 'openafs-modules' 'openafs<1.6.6-2') options=(!emptydirs) source=("http://openafs.org/dl/openafs/${pkgver}/${_srcname}-${pkgver}-src.tar.bz2" - "dkms.conf" - 0001-Avoid-duplicate-definitions-of-globals.patch - 0002-LINUX-5.8-Replace-kernel_setsockopt-with-new-funcs.patch - 0003-LINUX-5.8-do-not-set-name-field-in-backing_dev_info.patch - 0004-LINUX-5.8-use-lru_cache_add.patch - 0005-LINUX-5.9-Remove-HAVE_UNLOCKED_IOCTL-COMPAT_IOCTL.patch - 0006-LINUX-Fix-includes-for-fatal_signal_pending-test.patch - 0007-Linux-Refactor-test-for-32bit-compat.patch - 0008-Linux-5.11-Test-32bit-compat-with-in_compat_syscall.patch - 0009-LINUX-Introduce-afs_d_path.patch - 0010-Linux-Create-wrapper-for-setattr_prepare.patch - 0011-Linux-5.12-Add-user_namespace-param-to-inode-ops.patch) -sha256sums=('53543a561fce67714fec9f2a6bf408c5cc1d061c7dc9d1459458275e8ccbfa79' - '5ea5e184f9b44f5ed45817d2b5a10149d15c8c54f49e0b5b4b773652673cb9b0' - '909ebe2f2f82187ec5c8bd19a385e310521dceedb0b0d5ce8413809a37fe5654' - '2439b2f663feed02c526f4e34b2cdc2a1d5ad35f7223ade87508c1cf4359ee9c' - 'e605d4e7154f9ccf4dec24fec27abe4e2947713f35dae6aa8698e5f8722609a7' - '15b53b4ab0578eaa31f849670990e15949e67be8b330d7581825a5e8408953ed' - 'ba8c81c035303cbcf204744516a83b66adac94384aaa59ea2ea1a619a41aa7c0' - 'd078882d94adf881bac2e7955689931abe7ac443db86d85e0b60c72d8b27738e' - '19ca49013e32824002e355a85df6e25028283a0b06a6409cc7d5cd9800fea488' - '52d40f8a3b032a9fa0ae57bc15d3611bc652ff6e417a488eac4223cef0db9142' - '457474e625565c28daa6d642b2416b4398b2b9fec3a8b90c048fc0460412a0ce' - '76d73a55d3e8da63c9ead2cecdec1efbaeb78739bb5abf635a64380eeba35158' - '8bc24efe33f06228134dd27e5c9a6832abb436e2fbe3fab09b529fed4a5b406c') + "dkms.conf") +sha256sums=('daa8ef86a7727facfcde3bc97a6ad143129c1c25ee35f3347080ec7e9d284da0' + '5ea5e184f9b44f5ed45817d2b5a10149d15c8c54f49e0b5b4b773652673cb9b0') prepare() { cd "${srcdir}/${_srcname}-${pkgver}" - # Fix compilation with GCC 10 - patch -p1 < "${srcdir}"/0001-Avoid-duplicate-definitions-of-globals.patch - - # Compatibility with Linux 5.8 - patch -p1 < "${srcdir}"/0002-LINUX-5.8-Replace-kernel_setsockopt-with-new-funcs.patch - patch -p1 < "${srcdir}"/0003-LINUX-5.8-do-not-set-name-field-in-backing_dev_info.patch - patch -p1 < "${srcdir}"/0004-LINUX-5.8-use-lru_cache_add.patch - - # Compatibility with Linux 5.9 - patch -p1 < "${srcdir}"/0005-LINUX-5.9-Remove-HAVE_UNLOCKED_IOCTL-COMPAT_IOCTL.patch - - # Compatibility with Linux 5.11 - patch -p1 < "${srcdir}"/0006-LINUX-Fix-includes-for-fatal_signal_pending-test.patch - patch -p1 < "${srcdir}"/0007-Linux-Refactor-test-for-32bit-compat.patch - patch -p1 < "${srcdir}"/0008-Linux-5.11-Test-32bit-compat-with-in_compat_syscall.patch - - # Compatibility with Linux 5.12 - patch -p1 < "${srcdir}"/0009-LINUX-Introduce-afs_d_path.patch - patch -p1 < "${srcdir}"/0010-Linux-Create-wrapper-for-setattr_prepare.patch - patch -p1 < "${srcdir}"/0011-Linux-5.12-Add-user_namespace-param-to-inode-ops.patch - # Only needed when changes to configure were made - ./regen.sh -q + # ./regen.sh -q } build() { |