commit a0b7f71122285f71c3ff0d006d1f9a77b1481732 Author: Stephan Wiesand Date: Thu Jun 29 23:20:28 2023 +0200 Make OpenAFS 1.8.10 Update version strings for the 1.8.10 release, and add the finishing touch to NEWS. Change-Id: I5ade3bf8eb05474c5e4344e7c727545e807a0053 Reviewed-on: https://gerrit.openafs.org/15490 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit a48dc74d793a95790c34e9701bbcbe02080308bc Author: Stephan Wiesand Date: Thu Jan 12 18:06:30 2023 +0100 Make OpenAFS 1.8.10pre1 Update version strings for the first 1.8.10 prerelease. Change-Id: I116eb9852e7799540fea4cd439f513d571231f45 Reviewed-on: https://gerrit.openafs.org/15282 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Mark Vitale Reviewed-by: Ben Huntsman Reviewed-by: Stephan Wiesand commit 30e83126649e8aeeecf1c10436f6f9a315e459b6 Author: Stephan Wiesand Date: Thu May 18 16:55:11 2023 +0200 Update NEWS for 1.8.10pre1 Release notes for the first 1.8.10 prerelease. Change-Id: Ie7ed1b65444239528edcb4861ad3e99af54c4bbb Reviewed-on: https://gerrit.openafs.org/15440 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit abeed74bb0d0bd7a3a5dbd13b9e953a994fb78e6 Author: Andrew Deason Date: Fri May 5 16:47:45 2023 -0500 LINUX: Set .getattr for symlinks On Linux, we can define a .getattr callback for files and directories, which is called when a caller requests metadata for the file, such as during lstat(). For regular files and directories, we set this to afs_linux_getattr(), which updates the metadata for the file in question if it's out of date (CStatd not set). For symlinks, however, we don't set .getattr at all. This would seem to allow symlink metadata to become stale if another client changes it, but the metadata often happens to stay up to date via other means. For example, we can see the following happen: - Another client changes, for example, the owner of a symlink we have cached. - The fileserver sends us a callback break, and so we clear CStatd for the vcache for the symlink. - lstat() is called for the symlink, which causes afs_linux_dentry_revalidate() to be called for the cached dentry. Since CStatd is not set for the vcache, we verify the entry by calling afs_lookup(), and then update the symlink's metadata via afs_getattr() and vattr2inode(). However, if CStatd _is_ set for the symlink when lstat() is called, afs_linux_dentry_revalidate() will not update anything, and will just return success. So, if we manage to set CStatd for the symlink without updating it's Linux VFS metadata, the Linux metadata won't be updated, and we'll report the old metadata to the caller of lstat(). We can set CStatd without updating the Linux VFS info in a few different ways. A few pioctls such as PRemoveMount or PFlushMount can do this if they encounter an error, but the only code paths that call these pioctls in OpenAFS (via the 'fs' utility) also lstat() the relevant path, so this doesn't happen in practice. A more common way that this can occur is via afs_DoBulkStat(). If userspace triggers a bulkstat that includes the symlink in question, the symlink would gain the CStatd flag without any interaction with the Linux VFS. For example, say a symlink was chown'd from 'adeason' to 'root'. On another client with the symlink cached, running 'ls -l' on the symlink itself would show the updated owner, because afs_linux_dentry_revalidate() updates the metadata: $ ls -l dir.slink lrwxr-xr-x. 1 root root 3 May 5 14:48 dir.slink -> dir But if we 'ls -l' the entire directory, which contains other entries, we will bulkstat many of the entries, possibly including the symlink. And so we may see the old metadata: $ ls -l total 9 [...] lrwxr-xr-x. 1 adeason root 3 May 5 14:48 dir.slink -> dir Triggering this behavior requires a bulkstat to be triggered before we access the symlink itself, and so triggering this behavior depends on the order of the entries in the directory as well as whether the other items in the dir are cached. As such, triggering this behavior during normal operation tends to be inconsistent and confusing. The only lstat() info for symlinks that can change like this is the owner, group, and modtime; mode bits cannot change, and neither can the length/size (or the contents in general). So, stale metadata tends to not be very noticeable. To fix all of this, set .getattr to afs_linux_getattr() for symlinks, just like we do for regular files and directories. This ensures that we will update the Linux VFS metadata for the symlink when it is requested, so we won't return stale metadata to callers. This behavior appears to have existed for symlinks on Linux for quite a while, possibly since our Linux 2.6 support was added. The behavoir may have been introduced around commit b860b359d58 (initial-linux24-support-20001105) or commit 00543744955 (linux22-fix-20040405). Before those commits, we defined a .revalidate callback for symlinks, which was called on older Linux versions before fetching file metadata, and so probably ensured that an lstat() on a symlink returned properly updated info. Reviewed-on: https://gerrit.openafs.org/15423 Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 2b32b130f534068251ce9fd1b621de6e480d56d7) Change-Id: I194308e2a4783cc3205c6cfd54880421635f6b38 Reviewed-on: https://gerrit.openafs.org/15443 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 4394a3ee84ffaba559bbe9102c8e6d801f8d6625 Author: Andrew Deason Date: Wed Aug 26 13:54:00 2020 -0500 Retire AFS_MOUNT_AFS Currently, the AFS_MOUNT_AFS #define is used to mean two completely different things: - The string "afs", corresponding to the first argument to mount(2) on many platforms and some related calls inside libafs (e.g. getnewvnode() on FBSD). - An integer identifying the AFS filesystem (e.g. gfsadd() on AIX). Depending on the platform and the build context (UKERNEL vs KERNEL), AFS_MOUNT_AFS gets defined to one of those two things. This is very confusing, and has led to mistakes in the past, such as those fixed in commit 446457a1 (afs: Set AFS_VFSFSID to a numerical value). To avoid such confusion, get rid of AFS_MOUNT_AFS completely, and replace it with two new symbols: - AFS_MOUNT_STR, the string "afs". - AFS_FSNO, the integer given to gfsadd() et al. When AFS_MOUNT_AFS is split this way, AFS_MOUNT_STR then is always defined to the same value, so remove it from the param.h files for our platforms. Instead, define it in afs.h for libafs use, and in afsd_kernel.c (the only place outside of src/afs that uses it). Also remove the logic for conditionally defining MOUNT_AFS from the param.h files, moving the logic to the same locations as AFS_MOUNT_STR. Note that this commit removes the numeric definition for AFS_MOUNT_AFS in param.sgi_65.h (aka AFS_FSNO). We never actually used this value, since AFS_FSNO is not used on IRIX; instead, we tend to use the 'afs_fstype' global instead of a constant number. Reviewed-on: https://gerrit.openafs.org/14323 Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 6b96a49eb6268adf9fc7e077fe849af7802a1575) Change-Id: Iebb35b323ceb50f9603387c46168b80ec800735d Reviewed-on: https://gerrit.openafs.org/15422 Tested-by: BuildBot Reviewed-by: Ben Huntsman Tested-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Andrew Deason Reviewed-by: Cheyenne Wills Reviewed-by: Mark Vitale Reviewed-by: Stephan Wiesand commit ee6944d96d7692244438cb1aa7f84a102aebff76 Author: Benjamin Kaduk Date: Tue Aug 16 07:48:02 2022 -0700 rxevent: fix mismatched #endif We should only assign to 'ev' once, rather than assigning a second time to an uninitialized value. Reported by Ben Huntsman and diagnosed by Jeffrey Altman. Reviewed-on: https://gerrit.openafs.org/15106 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit e51ed7be3849025e9b47d1a644a4fcd99b774b30) Change-Id: I06ac2155170d8f005afd9551c69d5ef3e60afff3 Reviewed-on: https://gerrit.openafs.org/15442 Reviewed-by: Ben Huntsman Tested-by: Ben Huntsman Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit e4e9122365a3ec05c01add5333b532f2c19e1732 Author: Andrew Deason Date: Sun Jul 18 23:05:38 2021 -0500 opr: Avoid sigwait on SIGWAITING On AIX, calling sigwait() on a sigset containing SIGWAITING (or SIGKILL or SIGSTOP), causes sigwait to return with an EINVAL error. Currently, signalHandler() calls sigwait() with SIGWAITING, because SIGWAITING is in the sigset returned by softsigSignalSet(). And so, sigwait() returns EINVAL, and our opr_Verify in signalHandler() fails, causing a crash. To avoid this, remove SIGWAITING from the sigset in softsigSignalSet(). This is AIX-specific, since the SIGWAITING signal is AIX-specific. Reviewed-on: https://gerrit.openafs.org/14705 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit c2db41258370159c1257ee79df10afa4a2a2d9e8) Change-Id: I433e4842b684c5f0f453e20d2f5d455b10a792eb Reviewed-on: https://gerrit.openafs.org/15441 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 332b5593d487c25d0091c5572519364c57cace90 Author: Ben Huntsman Date: Thu May 4 16:52:38 2023 -0700 AIX: Free pinned_heap during shutdown to prevent kernel panic During shutdown, the function shutdown_osisleep is called in src/afs/afs_osi.c. The body of this function is platform- specific, and on AIX there is a call to xmfree: xmfree(tmp); However, on AIX, xmfree actually takes two arguments: int xmfree ( ptr, heap) caddr_t ptr; caddr_t heap; This is called elsewhere in the OpenAFS code correctly for kernel_heap. In src/afs/AIX/osi_sleep.c we start using the pinned_heap, but never xmfree it. Therefore, we need to do so here during the shutdown. Here we include a header file which defines pinned_heap, and then supply it as an argument to xmfree. This prevents a kernel panic during OS shutdown. The panic might go unnoticed in many environments, as during a reboot, the system will normally dump and restart anyway. However, if kdb is loaded (bosboot -a -D), the system will break into the debugger before the full shutdown procedure completes. The stack trace shows the following: KDB(0)> stack pvthread+01D200 STACK: [00023900]abend_trap+000000 () [000EFF24]xmfree_frontend+0000A4 (??, ??, ??) [F1000000C064CF1C]shutdown_osisleep@AF72_5+0000BC (??) [F1000000C064CB7C]shutdown_osi+00001C () [F1000000C064A51C]afs_shutdown+0003BC (0000000100000001) [F1000000C05A8DD4]afs_unmount+000094 (F1000A01501D4C10, 0000000000000000) [F1000000C059FCE0]vfs_unmount+0000A0 (F1000A01501D4C10, 0000000000000000, F1000A015047B07C) [00014D70].hkey_legacy_gate+00004C () [006A6AAC]vfs_unmount+00008C (??, ??, ??) [006B4228]kunmount+000228 (??, ??, ??, ??) [006B4944]uvmount+000204 (??, ??) [00003954]syscall+00024C () [100084FC]helper_UMfunc+00027C (??, ??) [10003D48]dounmount+0000C8 (??, ??, ??, ??) [100044DC]umountmain+0001BC (??, ??) [10000AD4]main+0000B4 (??, ??) [10000168]__start+000068 () Reviewed-on: https://gerrit.openafs.org/15419 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit 4810cca10bc32df7ba7809fc2bf095d20e2febd8) Change-Id: I687caa6daae83fc7986e76d370b55f90f5ca53cc Reviewed-on: https://gerrit.openafs.org/15425 Tested-by: BuildBot Reviewed-by: Ben Huntsman Tested-by: Ben Huntsman Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit a2ab598bae94a9ce0c95034c1a54bcd8e12d5a87 Author: Ben Huntsman Date: Thu May 4 10:00:43 2023 -0700 AIX: AFS_SMALLOCSIZ too small on newer OS releases Addresses a situation where a write in AFS space can cause a kernel panic. In src/afs/afs_osi_uio.c in the function afsio_partialcopy: size_t space_len = sizeof(struct uio) + sizeof(struct iovec) * AFS_MAXIOVCNT; /* Allocate a block that can contain both the UIO and the iovec */ space = osi_AllocSmallSpace(space_len); On newer AIX systems (since at least 6.1), space_len is larger than AFS_SMALLOCSIZ. When osi_AllocSmallSpace is called, the following test in src/afs/afs_osi_alloc.c causes a kernel panic: if (size > AFS_SMALLOCSIZ) osi_Panic("osi_AllocSmallS: size=%d\n", (int)size); This is due to the following definition in src/config/afs_args.h: /* * Note that the AFS_*ALLOCSIZ values should be multiples of sizeof(void*) to * accomodate pointer alignment. */ /* Used in rx.c as well as afs directory. */ /* XXX Because of rxkad_cprivate... XXX */ All the supported AIX platforms define AFS_AIX32_ENV in src/config/param.rs_aixXX.h, where XX is the AIX version. Therefore, all the AIX platforms end up with AFS_SMALLOCSIZ = 152 bytes instead of 256. To resolve this, we will modify the preprocessor test to use the second case for AIX versions greater than 6.1. This issue may be present on earlier releases of AIX as well, but AIX 5.3 and older test systems were not available at this time. Also, a spelling error in the comment was fixed. Reviewed-on: https://gerrit.openafs.org/15418 Reviewed-by: Mark Vitale Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit 8a2d4faa73d0f2e03a4016d7f84c5d5437040cec) Change-Id: I5a2fc4ad1a829f1ee30387da20ce477c84fa020f Reviewed-on: https://gerrit.openafs.org/15424 Tested-by: BuildBot Reviewed-by: Ben Huntsman Tested-by: Ben Huntsman Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit af58c5cd15ad7b93a93892247fd1c4119e806767 Author: Cheyenne Wills Date: Thu Apr 27 09:49:03 2023 -0600 Linux: Clear msghdr structure before use The msghdr structure is used as a parameter to the Linux kernel functions kernel_sendmsg() and kernel_recvmsg(). Some required fields need to be set prior to calling these functions, but there are also additional structure members that may not be used by the calling code. Some of these fields may be initialized by the Linux kernel functions being used, but there may be some that are left uninitialized. To ensure that all fields in the msghdr structure are cleared, use memset to zero the entire structure. This will eliminate the need to set individual fields to 0 or NULL. Reviewed-on: https://gerrit.openafs.org/15409 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 795ef90d4041f1a5a1139435cc70f96457e0f64b) Change-Id: Id037e2e548c27b23e2746f804ddcaf7b79d905c4 Reviewed-on: https://gerrit.openafs.org/15411 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 12ce31ce1dbd86dff47a036b36ce6ad506bd7b75 Author: Cheyenne Wills Date: Tue Apr 25 10:37:01 2023 -0600 Linux: Do not initialize msghdr's msg_iter/msg_iov Since the initial Linux commit (2.6.12-rc2) the Linux function kernel_recvmsg() handles the initialization of the msghdr members related to the iov (msghdr.msg_iter and for earlier kernels msghdr.msg_iov and msghdr.msg_iovlen). The code in osi_NetReceive for Linux unnecessarily initializes these structure members prior to calling kernel_recvmsg(). Remove the unnecessary code from osi_NetReceive along with the surrounding preprocessor check for STRUCT_MSGHDR_HAS_MSG_ITER. Since this is the only location that uses this define, also remove the associated autoconf test. NOTE: This was discovered while investigating changes needed for Linux 6.4, due to: "iov_iter: add iter_iovec() helper" (de4f5fed3f) which renamed the Linux structure iter_iovec's member iov to __iov. Since the openafs code that was affected by the Linux 6.4 change is being removed as unnecessary, this commit is not Linux 6.4 specific, but effects all versions of Linux. Reviewed-on: https://gerrit.openafs.org/15408 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 5a7630acfd8bfd462b633475a6e195d9dbdfb451) Change-Id: I3a803f76ab84f1e055e91cf4f2be96440f141746 Reviewed-on: https://gerrit.openafs.org/15410 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 0967702c3f71c5d61e33f905c3272d029303743e Author: Andrew Deason Date: Thu Jul 15 19:59:47 2021 -0500 AIX: Fix undefined symbols Various pieces of our code try to use symbols in our internal libraries that are not exported in the respective .sym file. On AIX, this causes the following build failures: ld: 0711-317 ERROR: Undefined symbol: .ubik_CallRock ld: 0711-317 ERROR: Undefined symbol: DISK_function_names ld: 0711-317 ERROR: Undefined symbol: VOTE_function_names ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[4]: *** [Makefile:45: afscp] Error 8 make[4]: Leaving directory '/.../src/libadmin/test' ld: 0711-317 ERROR: Undefined symbol: PR_function_names ld: 0711-317 ERROR: Undefined symbol: KAA_function_names ld: 0711-317 ERROR: Undefined symbol: KAT_function_names ld: 0711-317 ERROR: Undefined symbol: KAM_function_names ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[4]: *** [Makefile:117: rxstat_get_peer] Error 8 make[4]: Leaving directory '/.../src/libadmin/samples' ld: 0711-317 ERROR: Undefined symbol: .osi_audit_cmd_Options ld: 0711-317 ERROR: Undefined symbol: .osi_audit_open ld: 0711-317 ERROR: Undefined symbol: .afsconf_SuperIdentity ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:71: butc] Error 8 make[3]: Leaving directory '/.../src/tbutc' ld: 0711-317 ERROR: Undefined symbol: .pr_Initialize2 ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:111: pts] Error 8 make[3]: Leaving directory '/.../src/tptserver' ld: 0711-317 ERROR: Undefined symbol: .AFSVolListPartitions ld: 0711-317 ERROR: Undefined symbol: .AFSVolXListPartitions ld: 0711-317 ERROR: Undefined symbol: .RXAFS_GetStatistics64 ld: 0711-317 ERROR: Undefined symbol: .AFSVolPartitionInfo64 ld: 0711-317 ERROR: Undefined symbol: .AFSVolPartitionInfo ld: 0711-317 ERROR: Undefined symbol: .RXAFS_GetStatistics ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:65: fsprobe_test] Error 8 make[3]: Leaving directory '/.../src/fsprobe' ld: 0711-317 ERROR: Undefined symbol: fsprobe_Results ld: 0711-317 ERROR: Undefined symbol: gtxframe_exitValue ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:45: scout] Error 8 make[3]: Leaving directory '/.../src/scout' ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_toString ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_freeString ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:50: check_sysid] Error 8 make[3]: Leaving directory '/.../src/viced' ld: 0711-317 ERROR: Undefined symbol: .GetLogLevel make[3]: *** [Makefile:130: fileserver] Error 8 make[3]: Leaving directory '/.../src/viced' ld: 0711-317 ERROR: Undefined symbol: .GetLogDest ld: 0711-317 ERROR: Undefined symbol: .GetLogFilename ld: 0711-317 ERROR: Undefined symbol: .CloseLog make[3]: *** [Makefile:166: salvageserver] Error 8 make[3]: Leaving directory '/.../src/tsalvaged' ld: 0711-317 ERROR: Undefined symbol: .rxkad_StringToLevel ld: 0711-317 ERROR: Undefined symbol: .FilepathNormalize ld: 0711-317 ERROR: Undefined symbol: .ConstructLocalPath ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:32: upserver] Error 8 make[3]: Leaving directory '/.../src/update' ld: 0711-317 ERROR: Undefined symbol: xstat_fs_Results ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:77: xstat_fs_test] Error 8 make[3]: Leaving directory '/.../src/xstat' ld: 0711-317 ERROR: Undefined symbol: .afsconf_DeleteKeyBySubType ld: 0711-317 ERROR: Undefined symbol: .afsconf_DeleteKeyByType ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[3]: *** [Makefile:35: asetkey] Error 8 make[3]: Leaving directory '/.../src/aklog' ld: 0711-317 ERROR: Undefined symbol: .afsconf_FindService ld: 0711-317 ERROR: Undefined symbol: .afsconf_AddKey ld: 0711-317 ERROR: Undefined symbol: .afsconf_GetLatestKeyByTypes ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[4]: *** [Makefile:19: authcon-t] Error 8 make[4]: Leaving directory '/.../tests/auth' ld: 0711-317 ERROR: Undefined symbol: .afsconf_AddUser ld: 0711-317 ERROR: Undefined symbol: .afsconf_IsSuperIdentity ld: 0711-317 ERROR: Undefined symbol: .afsconf_AddIdentity ld: 0711-317 ERROR: Undefined symbol: .afsconf_GetNthUser ld: 0711-317 ERROR: Undefined symbol: .afsconf_GetNthIdentity ld: 0711-317 ERROR: Undefined symbol: .afsconf_DeleteUser ld: 0711-317 ERROR: Undefined symbol: .afsconf_DeleteIdentity ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[4]: *** [Makefile:25: superuser-t] Error 8 make[4]: Leaving directory '/.../tests/auth' ld: 0711-317 ERROR: Undefined symbol: .afsconf_GetKeys ld: 0711-317 ERROR: Undefined symbol: .rx_opaque_new ld: 0711-317 ERROR: Undefined symbol: .rx_opaque_free ld: 0711-317 ERROR: Undefined symbol: .afsconf_GetKeyByTypes ld: 0711-317 ERROR: Undefined symbol: .afsconf_GetKeysByType ld: 0711-317 ERROR: Undefined symbol: .afsconf_PutTypedKeyList ld: 0711-317 ERROR: Undefined symbol: .afsconf_GetLatestKeysByType ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[4]: *** [Makefile:31: keys-t] Error 8 make[4]: Leaving directory '/.../tests/auth' ld: 0711-317 ERROR: Undefined symbol: ._afsconf_Touch ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[1]: *** [Makefile:34: realms-t] Error 8 make[1]: Leaving directory '/.../tests/auth' ld: 0711-317 ERROR: Undefined symbol: .opr_cache_get ld: 0711-317 ERROR: Undefined symbol: .opr_cache_put ld: 0711-317 ERROR: Undefined symbol: .opr_cache_init ld: 0711-317 ERROR: Undefined symbol: .opr_cache_free ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[1]: *** [Makefile:16: cache-t] Error 8 make[1]: Leaving directory '/.../tests/opr' ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_isNil ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_equal ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_hash ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_fromString ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_create ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_unpack ld: 0711-317 ERROR: Undefined symbol: .opr_uuid_pack ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[1]: *** [Makefile:37: uuid-t] Error 8 make[1]: Leaving directory '/.../tests/opr' ld: 0711-317 ERROR: Undefined symbol: .rxevent_Init ld: 0711-317 ERROR: Undefined symbol: .rxevent_Post ld: 0711-317 ERROR: Undefined symbol: .rxevent_Cancel ld: 0711-317 ERROR: Undefined symbol: .rxevent_RaiseEvents ld: 0711-317 ERROR: Undefined symbol: .rxevent_Put ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. make[1]: *** [Makefile:18: event-t] Error 8 make[1]: Leaving directory '/.../tests/rx' To fix these, export the relevant symbols from the library's .sym file. Reviewed-on: https://gerrit.openafs.org/14707 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 9656a6b92b86849aa964529947bacb5aea4d83eb) Backport notes: The following symbols are not present in the 1.8.x branch at this time, so removed from this backported patch: * afsconf_GetLatestRXGKKey * opr_cache_free * opr_cache_get * opr_cache_init * opr_cache_put * osi_audit_close * osi_audit_cmd_Options * osi_audit_open * pr_Initialize2 * ubik_CallRock The following symbol files are not present in the 1.8.x branch at this time, so were removed from this backported patch: * src/fsprobe/liboafs_fsprobe.la.sym * src/gtx/liboafs_gtx.la.sym * src/xstat/liboafs_xstat_fs.la.sym Change-Id: Idd7059fe9e372d9131fa575412b391f03cb24bb3 Reviewed-on: https://gerrit.openafs.org/15403 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 5e282943ff00fbd5c9ba3056c25959794f8a1144 Author: Andrew Deason Date: Fri Apr 7 14:10:58 2023 -0500 LINUX: Introduce afs_d_alias_foreach We have a couple of places in the code that iterate over the dentry aliases of an inode, and each of these involves a small #ifdef ladder to handle slightly different ways of traversing the relevant list. Split this logic into its own compatibility macro, afs_d_alias_foreach[_reverse], to contain this ugliness in osi_compat.h and make the callers more readable. This commit should incur no functional change; it is just code reorganization. Reviewed-on: https://gerrit.openafs.org/15390 Reviewed-by: Benjamin Kaduk Reviewed-by: Cheyenne Wills Tested-by: BuildBot (cherry picked from commit 5aaed53f07fae0856e6da9defc408960e72364a7) Change-Id: I107c01917512da6c1043880cb93754be37919c47 Reviewed-on: https://gerrit.openafs.org/15401 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 7f9445bbeb72bcb8257ba0e0608746e31efae40e Author: Andrew Deason Date: Mon Jul 15 16:24:10 2019 -0500 afs: Fix a few ARCH/osi_vcache.c style errors Most of the ARCH/osi_vcache.c implementations were defining functions like: void osi_foo(args) { /* impl */ } But our prevailing style is: void osi_foo(args) { /* impl */ } Fix them to follow our prevailing style, and fix a couple of the more obvious errors with identation and goto label. Reviewed-on: https://gerrit.openafs.org/13699 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit ee7019a7630d01f29fecebd89ca69ad8a37e24e2) Change-Id: I2a34a0d8fd7b6c3721ede0c40c212c3993402235 Reviewed-on: https://gerrit.openafs.org/15400 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit f6fbb85c00411bf97e9855be73baf49bd6b061d7 Author: Cheyenne Wills Date: Wed Mar 29 12:11:38 2023 -0600 Linux 6.3: Use mnt_idmap for inode op functions Through a series of Linux 6.3 commits starting with: 'f2fs: project ids aren't idmapped' (64b4cdf22f) and ending with 'fs: move mnt_idmap' (3707d84c13) the inode operations functions were changed to take a mnt_idmap structure instead of a user_namespace structure. These were pulled in via the the merge commit: 'Pull vfs idmapping updates from Christian Brauner' (05e6295f7b) The commit message for the merge contains background and overall information for this conversion. The above change simply changes the functions to use a different structure (mnt_idmap instead of user_namespace). For afs, it is a simple change to swap the structures. But for some of the Linux calls (generic_fillattr(), setattr_prepare(), and inode_op->setattr()) we would like to use the Linux symbol nop_mnt_idmap, but that symbol is exported as GPL only. Instead, we will obtain its address from the current task structure at libafs initialization (much the same way as obtaining current user namespace for afs_ns). Add autoconf tests to determine if inode_operations.create() uses the mnt_idmap structure. If so set a generic configure define for "IOP_TAKES_MNT_IDMAP". Update afs's inode operations functions to take and use a mnt_idmap instead of a user_namespace. At libafs initialization, obtain the mnt_idmap from the current task and save it as an afs global variable, afs_mnt_idmap, to be used where needed. Reviewed-on: https://gerrit.openafs.org/15347 Reviewed-by: Mark Vitale Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit 858ee34545e57acab1e4e5813cd1b9a011538b9e) Change-Id: If89c6f401db04826ef45de83b91240f106cca616 Reviewed-on: https://gerrit.openafs.org/15389 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Kailas Zadbuke Reviewed-by: Stephan Wiesand commit 7a3ad3bc1c87e525698f7dda1e4b0fbbd913da03 Author: Cheyenne Wills Date: Wed Mar 22 16:56:09 2023 -0600 Linux 6.3: Include linux/filelock.h if available Linux 6.3 commit 'filelock: move file locking definitions to separate header file' (5970e15dbc) relocated file lock related declarations from 'linux/fs.h' into its own header file, 'linux/filelock.h'. Add autoconf tests to check for the header file 'linux/filelock.h' and update function checks for locks_lock_file_wait() and posix_lock_file(). Update osi_compat.h to include linux/filelock.h if it is available. Reviewed-on: https://gerrit.openafs.org/15346 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk Reviewed-by: Andrew Deason (cherry picked from commit 6873dc925c5acc0ce7d65cf778ffee09c82a9898) Change-Id: If131bee5b466a119f54b05388a065e6af23698cf Reviewed-on: https://gerrit.openafs.org/15388 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Kailas Zadbuke Reviewed-by: Stephan Wiesand commit 30cf5d8f934afdaa5a2a28b2e5fac8adde70808b Author: Ben Huntsman Date: Tue Jan 31 11:28:49 2023 -0600 AIX: Avoid including net/netisr.h on AIX 7.2 and above On AIX 7.2 and higher, /usr/include/net/netisr.h includes a header . This is an internal kernel library header that IBM does not ship. The include of sys/libsysp.h is new in AIX 7.2. The only information we need from net/netisr.h are the definitions for NETISR_MAX and NET_KPROC. Using the macro AFS_AIX72_ENV, defined in src/config/param.rs_aix72.h and param.rs_aix73.h, we can just provide these definitions directly and avoid the include of net/netisr.h. As part of this update we also add the macro AFS_AIX72_ENV to src/config/param.rs_aix72.h as it was missing there but is required for the edit to src/rx/AIX/rx_knet.c to work. On earlier versions of AIX, we will continue to include net/netisr.h. A case has been opened with IBM and they acknowledge the problem and are working on a solution. However, we still need to be able to deal with the situation as shipped from IBM. A future AIX 7.4 will likely be able to include net/netisr.h again. Reviewed-on: https://gerrit.openafs.org/15312 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit ca67e8c84891200398e577d76c0125966d22b01e) Change-Id: Icc3e241e09876a4e9ed3e779c1ba904e0762f92c Reviewed-on: https://gerrit.openafs.org/15386 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit e83ce49c2dfff64b87a265a4250957a2e62c94d2 Author: Ben Huntsman Date: Mon Jan 30 19:11:32 2023 -0600 comerr: Update rule for compile_et Update the build rule for compile_et under new platform rs_aix73. Reviewed-on: https://gerrit.openafs.org/15311 Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk Reviewed-by: Michael Meffie Tested-by: BuildBot (cherry picked from commit b713b62b3358482a818436a54975596188cb002b) Change-Id: I726cf21a2c70305c24c3f43f2504e70a98536aa7 Reviewed-on: https://gerrit.openafs.org/15385 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 9b94108664330ac4b95a026a8be6c1e260c507fc Author: Ben Huntsman Date: Mon Jan 30 19:08:20 2023 -0600 configure: Add platform rs_aix73 Enable the configure script to detect and configure AIX 7.3. Update INSTALL to reflect new platform. Reviewed-on: https://gerrit.openafs.org/15310 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit d03723e87a16e19a34950ca84a6139095a0694f9) Change-Id: I6727512ee343b3ee4cbb03c1e6242a69f407b987 Reviewed-on: https://gerrit.openafs.org/15384 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit c962d1b91141daceb66c58b30f2acef9e22f36c0 Author: Ben Huntsman Date: Thu Aug 25 11:58:31 2022 -0700 INSTALL: Update INSTALL to reflect AIX platforms Update the INSTALL file to reflect the current rs_aix platforms that we can build for. Reviewed-on: https://gerrit.openafs.org/15142 Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 4580f213b3a25dd57e6fd721f7ecc0ecad84fb07) Change-Id: I3e0d62258e57ff6a54fae2e49a427c764e03a9ae Reviewed-on: https://gerrit.openafs.org/15383 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit cff8ef661ba272027e44a0b21d77c3cc4e69b0ef Author: Ben Huntsman Date: Thu Aug 25 14:53:00 2022 -0700 AIX: Fix issue with make install on AIX 7.1 and higher Added rules to src/export/Makefile.in for the install target under AIX 7.1 and higher. Reviewed-on: https://gerrit.openafs.org/15146 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit f4fc18b80e81f10b17729ef06cca6a9548d36130) Change-Id: I0fcc1429111eaafa489adec330b5eb900022293e Reviewed-on: https://gerrit.openafs.org/15382 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit c6a391f6212860e381373f3c915885ff92a755cf Author: Ben Huntsman Date: Thu Aug 25 12:00:51 2022 -0700 configure: Add platform rs_aix71 Enable the configure script to detect and configure AIX 7.1. Reviewed-on: https://gerrit.openafs.org/15143 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit 1aeac365712f09ac90fe251c90b889548e25ac89) Change-Id: I469d94701d3554e74cfdc78686a83e7333210ad4 Reviewed-on: https://gerrit.openafs.org/15381 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 3a88fb9a73b612473090c505a67d3bd4d707f4ba Author: Ben Huntsman Date: Thu Aug 25 14:23:51 2022 -0700 libafs: Add support for AIX 7.1, 7.2 src/libafs/MakefileProto.AIX.in contains rules for various versions of AIX, but did not have any case for AIX 7.1 or 7.2 This causes build failures on those platforms. Added in the missing entries for rs_aix71 and rs_aix72. Reviewed-on: https://gerrit.openafs.org/15145 Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 0c43fe64dd885aed1ec1be4a2419e6396e583ec5) Change-Id: I68315c09eb3d6b2e30ea759d4f9bf5726a98e5d7 Reviewed-on: https://gerrit.openafs.org/15380 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit b6696e67bc7a85d892531a5e7c3a0f03998ba64b Author: Ben Huntsman Date: Thu Aug 25 13:15:11 2022 -0700 AIX: Correctly create export64.exp on AIX 7.1+ Create the export64.exp file on AIX 7 and higher. Reviewed-on: https://gerrit.openafs.org/15144 Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit ba3e1410d5df4454dc4dc63e1404a261977b0f60) Change-Id: I7ec71522f8e35ede3532e3b1d77623ef25510561 Reviewed-on: https://gerrit.openafs.org/15379 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 927f906f3d0cfdbe6f38608a56f9f92700806f1e Author: Ben Huntsman Date: Tue Aug 23 13:15:46 2022 -0700 afs: Use strlcat instead of snprintf to enable AIX build The original code used strcpy(), etc. Some compilers have begun to raise warnings that the use of these functions is unsafe, and in the case of newer Linux kernels in particular, have caused the build to fail outright. To adapt to these compilers/kernels, the code was changed to leverage strlcpy(), snprintf(), etc. as they are safer. AIX does not provide these functions within the kernel. For some of the functions such as strlcpy(), etc. we can use replacement functions from libroken within the AIX kernel extension. However, libroken does not offer a suitable replacement for snprintf(), and instead the same purpose can be accomplished by using strlcpy() and multiple calls to strlcat(). Reviewed-on: https://gerrit.openafs.org/15122 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 54dbd474a5bd43cf62a226802593b062069509ce) Change-Id: Ie59450a91fcb374b1362f0bd88a93f258597a22d Reviewed-on: https://gerrit.openafs.org/15378 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 2826b3271aea8608fec44174d8b7e1ea7e805d99 Author: Ben Huntsman Date: Fri Aug 19 08:34:33 2022 -0700 BUILD: Ensure that make clean actually cleans all products After a build, running make clean leaves the following objects: src/dir/test/dtest.o src/libuafs/libuafs.a src/libuafs/*.o src/roken/*.o Add a few rules to the various Makefiles to ensure that we clean up those files as well. Reviewed-on: https://gerrit.openafs.org/15119 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit ad2b880c3791046883f8c0ef15f327c85e013b5b) Change-Id: Iaef185ec0e045ded8453f6b276e6b6b9075b3388 Reviewed-on: https://gerrit.openafs.org/15377 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 9d2bfcab35eac3dc0040be10681269daba30f866 Author: Ben Huntsman Date: Sat Aug 13 11:40:44 2022 -0700 afs: Fix missing def for pinned_heap on AIX Include sys/malloc.h in AIX's osi_sleep.c. This resolves a build failure in which pinned_heap is not defined. The commit below introduced code to resolve an issue on AIX 5.3: 5e5bfa6b9401ebc1fa5446e208cf46c15943c411 Author: Tom Keiser Date: Mon Jun 25 21:22:49 2007 +0000 aix53-avoid-wait-crash-20070625 newp = (afs_event_t *) xmalloc(sizeof(afs_event_t), 5, pinned_heap); pinned_heap has always been defined in sys/malloc.h since at least AIX 4.1. It is likely that the aix53-avoid-wait-crash-20070625 commit did not compile, or that sys/malloc.h was included elsewhere at the time. Reviewed-on: https://gerrit.openafs.org/15108 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Reviewed-by: Benjamin Kaduk (cherry picked from commit 615681710a38bd1a92f2c476df9fdab7ac1d9bdd) Change-Id: I3fcfc1c7e3e26e927d0a8e2a233c4c12b0781308 Reviewed-on: https://gerrit.openafs.org/15376 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit d00e6d6fb5ec4cf2520ae2c71f38091d950ec785 Author: Ben Huntsman Date: Mon Aug 15 10:44:14 2022 -0700 AIX: Fix install of 64-bit kernel module Remove make step in error. This was preventing the install of the built kernel module on AIX when not using Transarc-style paths via the make install step. Reviewed-on: https://gerrit.openafs.org/15114 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 319d361499af933451425acaeabac9bc6548c96b) Change-Id: I252de19363824ae23187b7b9da878137814ab09d Reviewed-on: https://gerrit.openafs.org/15375 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 99ea3deeb5b082bdcbd14c41b6a2c11a900bccb4 Author: Ben Huntsman Date: Mon Aug 15 10:00:07 2022 -0700 util: Add missing symbol for AIX build Added symbol afs_exec_alt to liboafs_util.la.sym. This resolves a build failure on AIX. Reviewed-on: https://gerrit.openafs.org/15113 Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit c0968b6c69c3f16468a7fe4a234d8421731e20e0) Change-Id: I060b7b102c963a517d79bad41b5e4c827cbccad8 Reviewed-on: https://gerrit.openafs.org/15374 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 0d845973f05ef70991f0ee8007fb1a2dfdea3ea1 Author: Ben Huntsman Date: Sat Aug 13 23:25:10 2022 -0700 fsint: export symbol needed by fileserver The symbol RXAFS_OpCodeIndex is consumed by the fileserver via the various "opcode_" macros produced by rxgen. The functionality is provided by liboafs_fsint but RXAFS_OpCodeIndex was omitted from the export symbol list. This went undetected because we use static linking for the fileserver, and libtool does not enforce export symbol lists while static linking, on platforms other than AIX. Recent efforts to revive the AIX build illuminated the error, which we resolve by adding RXAFS_OpCodeIndex to the export list. Reviewed-on: https://gerrit.openafs.org/15112 Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 91532e3142751468aa8f7bbabe7de087b77259bf) Change-Id: Ia665937002137dca1a8ec4573b4fe8932fc90dd0 Reviewed-on: https://gerrit.openafs.org/15373 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit c0cfe72f072ad27c7958b110678134adad7cebbd Author: Ben Huntsman Date: Sat Aug 13 11:47:07 2022 -0700 export: Ignore additional build products generated on AIX Update .gitignore to ignore additional build products generated on AIX. Reviewed-on: https://gerrit.openafs.org/15110 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 448d2b1184e872f977a662c3f48af04029f9a112) Change-Id: Iff910b63174c9b046e031285dd30672b0f592c1a Reviewed-on: https://gerrit.openafs.org/15372 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit b768ba5f1fa15763177cad3ed35e1da5316e7f14 Author: Ben Huntsman Date: Mon Aug 15 14:45:12 2022 -0700 export: Install kernel utilities with execute permissions on AIX Make sure that cfgexport and cfgafs are installed with execute permissions. These executables load the AIX kernel modules into the running kernel and are called by the rc.afs script. Reviewed-on: https://gerrit.openafs.org/15116 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit 1a4da8868fd32e928def64599bb6ec9d6b455423) Change-Id: I575d89164ef386d1cdf562b2206b502b3c2e8582 Reviewed-on: https://gerrit.openafs.org/15371 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit f3cdd139d83fc74f89d16ab6f685ec25ea40edf4 Author: Ben Huntsman Date: Sat Aug 13 11:40:18 2022 -0700 afs: Fix missing def for timestruc_t on AIX Include sys/time.h in AIX's osi_machdep.h. This resolves a build issue where the struct timestruc_t was not defined. Reviewed-on: https://gerrit.openafs.org/15107 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit b5b34278b26ca22eea988fb18d738969dd608ede) Change-Id: Icb91b47d819f1bcc0e277a482f2a22d87dc8bc6c Reviewed-on: https://gerrit.openafs.org/15370 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 75578909c5071d45eb2a5989917a3e4a9234aace Author: Andrew Deason Date: Fri Jul 16 14:02:07 2021 -0500 tsm41: Fix libs for AIX 7.2 AIX 7.2 doesn't seem to have libcsys, netinet.exp, sockets.exp, or statcmd.exp available. To allow for our IMPORTS and LDFLAGS to change depending on the AIX version, introduce the autoconf vars TSM_IMPORTS and TSM_LIBS, which do not contain the missing libs on AIX 7.2, so we can build on AIX 7.2. Reviewed-on: https://gerrit.openafs.org/14703 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit a912db315b4f29673808a7f900eb038ebd7b89c2) Change-Id: Ic106b893f212b33c85bded8443bcb782205f290c Reviewed-on: https://gerrit.openafs.org/15369 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit 567c987992b2e027668186e75017423e5637308b Author: Andrew Deason Date: Thu Jul 15 17:53:43 2021 -0500 AIX: Add buildsystem support for AIX 7.2 Reviewed-on: https://gerrit.openafs.org/14701 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 7acd66ae39db2049c8f80f4fceb4fcd15fe8e8b8) Change-Id: I94e74b56379fe1103d966883835b8af8a0d98f7e Reviewed-on: https://gerrit.openafs.org/15368 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit c8a92c4a7e1badfaf81517303440cd9ac7a55dd0 Author: Michael Meffie Date: Thu Mar 15 18:53:59 2018 -0400 roken: do not clobber __attribute__ The roken-common.h header defines an empty macro called __attribute__ when HAVE___ATTRIBUTE__ is not defined. This macro conditionally removes the `format' function attributes in the roken headers at compile time. Unfortunately, the empty __attribute__ macro will also clobber other attribute types encountered after the roken.h header inclusion. This is not an issue when building under gcc or clang, since the empty attribute macro will not be defined. However Solaris Studio supports a subset of the function attribute types, with `format' not currently supported. This means roken will define an empty __attribute__ macro, which prevents the use of other attribute types. This commit does not change the roken files directly because they are external. Instead, the processing of the roken.h.in file has been updated to undefine the __attribute__ macro at the end of the generated roken.h header. Reviewed-on: https://gerrit.openafs.org/12961 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 388eaec3452ed4b18a95ee34efcbe4cf64814701) Change-Id: Id93ec414a59a2f5866e503601b7e42bbb4f8d66a Reviewed-on: https://gerrit.openafs.org/15367 Tested-by: BuildBot Reviewed-by: Ben Huntsman Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit c08c7ba8fbf37018176ee87b980650dd34124678 Author: Cheyenne Wills Date: Fri Feb 24 13:05:29 2023 -0700 rx: Revert RXS_DestroyConnection()'s return type Commit 'rx: Do not ignore RXS_* op errors' (635594d6c) changed the rx_securityOps.op_DestoryConnection()'s signature to a void return. This is a change to a public interface. To maintain backward compatibility within openafs 1.8.x, restore op_DestoryConnection's signature back to returning an 'int', and revert the changes to rxkad_DestroyConnection() so it returns an int value. Since returning an error value from this function doesn't make sense, as noted by commit '635594d6c', always return a 0 value. This is a 1.8.x specific commit Change-Id: I9685ac884a10298ae8faad012717499874f25316 Reviewed-on: https://gerrit.openafs.org/15334 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 1da00dfa9446c4c881e8659ec48a5e00262828ca Author: Andrew Deason Date: Mon Apr 12 18:21:23 2021 -0500 afs: Assert avc->lock is held in afs_IAS_once Commit 3be5880d (afs: Avoid panics in afs_InvalidateAllSegments) added an assert to check that vcache->lock is write-locked before we call afs_InvalidateAllSegments_once from a background operation. However, afs_InvalidateAllSegments_once should always be called with vcache->lock write-locked; there's nothing specific about the backgrounded call that requires this. So to make sure we catch all cases, move this assert to afs_InvalidateAllSegments_once itself. Also remove the conditional check for WriteLocked(&avc->lock) in here, since clearly avc->lock must be write-locked (and actually is, since change Ic309e4006bf47bcb38fa2b53bf103e0c645a856d "afs: write-lock vcache->lock in afs_InactiveVCache"). Add some comments to this function while we're here, to more clearly indicate what locks are needed. Reviewed-on: https://gerrit.openafs.org/14592 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Benjamin Kaduk (cherry picked from commit 72223e0958c2d7cddd968970547dd73fc3cc1351) Change-Id: I9acf5599a8ef1e724a00cf362695fe34ca87c0bf Reviewed-on: https://gerrit.openafs.org/15331 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Andrew Deason Reviewed-by: Stephan Wiesand commit 002c5a0c758aeb023c0fb2caa2247e8574fff1aa Author: Andrew Deason Date: Mon Feb 10 15:57:43 2014 -0600 Move key-related warnings to common server code Each server process can log a couple of different warnings about the server keys found on disk: - If afsconf_GetLatestKey() returns success (indicating a single-DES key is present), we call LogDesWarning(). - If afsconf_CountKeys() returns 0 (indicating there are no keys at all on disk), we log a warning that all authenticated access will fail. Currently, the code to do these checks and log the relevant warning is duplicated across the startup code for nearly every server process. To avoid this duplication, and to make sure the checks aren't accidentally skipped for anyone, move these checks to afsconf_BuildServerSecurityObjects, which every server process calls. We must add an additional parameter to afsconf_BuildServerSecurityObjects to handle the different logging mechanism these servers use, but afsconf_BuildServerSecurityObjects is declared in a public header (cellconfig.h), and is exported in a public library (libafsauthent). So to avoid changing a public symbol, introduce a new variant of the function, called afsconf_BuildServerSecurityObjects_int. Declare this in a new internal header, authcon.h. We don't have easily-usable logging functions for upserver and butc, so just don't log the warnings for those. For ubik servers, don't update ubik_SetServerSecurityProcs to use the new function; the initial call to afsconf_BuildServerSecurityObjects_int in the server's startup code will cover logging the warning on startup. Reviewed-on: https://gerrit.openafs.org/10831 Tested-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 2630e70550defc664efa0952589cf82ed3c51796) Change-Id: Ib37b92cfccbf161d72d2db73eeaea6fd8b312961 Reviewed-on: https://gerrit.openafs.org/15316 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Mark Vitale Reviewed-by: Stephan Wiesand commit 363a3050610ec66483c71c8052ba40337fead942 Author: Stephan Wiesand Date: Thu Jan 26 19:30:04 2023 +0100 CellServDB update 09 May 2022 Update all three copies in the tree, and the rpm specfile. Reviewed-on: https://gerrit.openafs.org/15305 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 1b92c766f1cf52b3bae3a00e08d40a2334bf9f24) Change-Id: I26fb3ff045d41b840fc6565d1a17aca8e75fcd30 Reviewed-on: https://gerrit.openafs.org/15323 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Mark Vitale Reviewed-by: Stephan Wiesand commit 4a0f5562915b1058de15ec46649c09cdbddce269 Author: Cheyenne Wills Date: Wed Jul 7 11:08:10 2021 -0600 Remove kdump Remove the obsolete kdump debugging tool from the tree. Remove and clean up the preprocessor tests associated with KDUMP, KDUMP_RX_LOCK and KDUMP_KERNEL. Clean up the autoconf and Makefiles to remove kdump and the associated autoconf and Makefile vars XLIBELFA and XLIBKVM. The kdump utility has not been well maintained; for some platforms it fails to build (e.g. Solaris 11). For Linux, the makefile does not even try to compile the kdump source but instead creates the kdump file via touch. The intended functionality of kdump has been replaced by various kernel debugging tools, such as dtrace or systemtap. Reviewed-on: https://gerrit.openafs.org/14623 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit 489cfb587a87ab53817ad0b4eccd65d9f7b332e2) Change-Id: Idf9582fd65482f32e7f13af0bf734c2b970da757 Reviewed-on: https://gerrit.openafs.org/15315 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Mark Vitale Tested-by: Mark Vitale Reviewed-by: Stephan Wiesand commit 4e4ffde5d0a17e48f82c4b67e921a8881ffc4fe5 Author: Andrew Deason Date: Mon May 25 16:48:34 2020 -0500 IRIX: Remove pre-65 code Commit d1923139 (irix kill efs and start pruning pre-65) removed all files that defined AFS_SGI64_ENV and earlier, but didn't remove that code that depended on those defines. In addition, there has been code in the tree that checks for AFS_SGI53_ENV since OpenAFS 1.0, but nothing has ever defined Irix 5.3 support in OpenAFS. Remove all of this obsolete code. Change all references to AFS_SGIXX_ENV to AFS_SGI_ENV, and assume AFS_SGI_ENV is defined in all IRIX dirs. Consolidate some of the resulting ifdef logic appropriately. Reviewed-on: https://gerrit.openafs.org/14230 Reviewed-by: Benjamin Kaduk Tested-by: Benjamin Kaduk (cherry picked from commit e0c288416df59a117cd818ada930fd1259955983) Change-Id: Ie188b9f108bf55cfae7fcb358a1de21bad076f11 Reviewed-on: https://gerrit.openafs.org/15314 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Andrew Deason Reviewed-by: Stephan Wiesand commit 85df2442240c9384822e6658e9aad4f83c19d6e3 Author: Mark Vitale Date: Tue Mar 9 23:12:50 2021 -0500 DARWIN: correct size of fstrace ICL_TYPE_LONG and ICL_TYPE_POINTER Commit 248da50aa56f19bdc8b2b322f5e17b3d2a363dce 'icl 64 bit platform rationalization' introduced support for 64-bit ICL_TYPE_POINTER and ICL_TYPE_LONG for fstrace running on DARWIN kernels. However, it neglected to make the matching change in the fstrace utility itself, which reads and reports these trace entries. The result is that all fstrace records which contain 64-bit pointers or longs are misreported as 32-bit values. Furthermore, any subsequent values in the same fstrace record are also misreported because the offsets are now incorrect. Move the definition of ICL_LONG from afs_icl.c to icl.h so fstrace.c may share the ICL_LONG logic and value. Modify fstrace to use logic similar to the recording logic in afs_icl.c so that the correct size and offsets are maintained while decoding the contents of each fstrace record. We can use the build-time value of ICL_LONG (rather than the runtime value of afs_sizeofLong) because the difference only matters for SGI62 32-bit kernels. It is unknown whether the existing code works correctly for SGI62 32-bit mode, but this commit should not affect that support either way. Reviewed-on: https://gerrit.openafs.org/14558 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit adf08b464efa8c29256dc7b261b10b60cc31119d) Change-Id: Ie3ef988d209a984839751051d7bd9a62369b5b11 Reviewed-on: https://gerrit.openafs.org/15313 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 37d01094b929a6bb745aeb00a3f5a40fd8fe5822 Author: Ben Huntsman Date: Wed Aug 17 17:19:55 2022 -0700 rx: Only use printf in the AIX kernel An earlier version of the OpenAFS code used an unusual preprocessor macro for the function osi_Msg and osi_VMsg. This causes problems on newer Linux kernels. The macro was replaced with a function leveraging vprintf, etc. These functions are not available in the AIX kernel, where our only option is printf. However, AIX does provide these functions in libc. This change ensures we only use printf when building the AIX kernel module. Reviewed-on: https://gerrit.openafs.org/15118 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit 8b1beaffb40c93ddab50c75b37f3de5ae517a849) Change-Id: Id06478cbc87b6965c021f26902e13bdfc2ef83d5 Reviewed-on: https://gerrit.openafs.org/15309 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 7c3c93db2977765a8b82426f0524b380f896b82f Author: Andrew Deason Date: Tue Jan 14 10:51:42 2020 -0600 afs: Properly type afs_osi_suser cred arg Currently, afs_osi_suser is declared with a void* argument, even though its only argument is always effectively a afs_ucred_t*. This allows us to call afs_osi_suser with any pointer type without the compiler complaining. Currently, some callers call afs_osi_suser with an incorrectly-typed afs_ucred_t** instead, like so: func(afs_ucred_t **credpp) { afs_ucred_t **acred = *acredpp; /* incorrect assignment */ if (afs_osi_suser(acred)) { /* ... */ } } The actual code in the tree hides this to some degree behind various function calls and layers of indirection (e.g. afs_suser()), but this is effectively what we do. This causes compiler warnings because we are doing incorrect pointer assignments, but the end result works because afs_osi_suser actually uses an afs_ucred_t*. The type confusion makes it very easy to accidentally give the wrong type to afs_osi_suser. This only really matters on SOLARIS, since that is the only platform that actually uses its argument to afs_osi_suser(). To fix all of this, just declare afs_osi_suser as taking an afs_ucred_t*, and fix all of the relevant functions to handle the right type. Reviewed-on: https://gerrit.openafs.org/14085 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 4ce922d339777faf647f7129f5ae3f173a7870b1) Change-Id: I1a6ce7788e86c32e554f87785f96f1d7b56d1496 Reviewed-on: https://gerrit.openafs.org/15308 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit bfb3125fc1b73ae17a346d33a1a34e51379db9c4 Author: Mark Vitale Date: Mon May 4 15:55:07 2020 -0400 Add static assert for size of osi_timeval32_t OpenAFS code requires osi_timeval32_t to have 32-bit sizes for members tv_sec and tv_usec - a total of 8 octets. One symptom of a misdefinition may be incorrect operation of xstat_cm_test, which relies on wire representations of time being 8 bytes on both the client and server side. In order to prevent incorrect sizes of osi_timeval32_t, add a static assert. Reviewed-on: https://gerrit.openafs.org/14195 Reviewed-by: Cheyenne Wills Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 10c5ba12ace51440c7e98add83465a7018961e6f) Change-Id: I9584a53154ffe673d19191a0bd9f6a92d6daf140 Reviewed-on: https://gerrit.openafs.org/15304 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Mark Vitale Reviewed-by: Stephan Wiesand commit 9433217b56afe3f23b2eeeefdb8fa644c2185e4a Author: Cheyenne Wills Date: Mon Jun 14 16:13:57 2021 -0600 rx: Cleanup rx.h Fix up indentation and white space within preprocessor statements. Remove multiple blank lines Fix #endif comments so they match the #if Split long #define lines RX_PACKET_TYPES rx_MaxUserDatasize, RXS_OP RXS_SetConfiguration Note, this commit does not refactor any preprocessor statements. Reviewed-on: https://gerrit.openafs.org/14629 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit 21df433134a059de8d3b3b46bb0892b34d910364) Change-Id: I197897f4f7e81bd2f931e3decefe447caae0c5d9 Reviewed-on: https://gerrit.openafs.org/15301 Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Stephan Wiesand commit bfc7688475fe5d2a178072a8978cf75635a15400 Author: Andrew Deason Date: Wed Mar 13 18:30:43 2019 -0500 rx: Do not ignore RXS_* op errors Several places in rx call an RXS_* security layer operation, but ignore the error code. Though errors for these operations are rare or impossible currently, if they ever do return an error there could be noticeable consequences, like a connection getting an uninitialized challenge nonce, or sending a challenge packet with uninitialized payload. Change these call sites to record and handle the error. Errors from the security class normally mean aborting the entire conn, but for many operations we need to behave differently: - For RXS_DestroyConnection, errors don't make sense, since we're just freeing an object. Change the op to return void, and update our implementations of DestroyConnection to match. - For RXS_GetStats, just clear the relevant stats structure on error instead. This change also results in us clearing the stats structure when there is no security class associated with the connection; previously we just reused the same struct data as the previous conn. - For RXS_CreateChallenge, aborting the entire conn is difficult, because some code paths have callers that potentially lock multiple calls on the same conn (rxi_UpdatePeerReach -> TryAttach -> rxi_ChallengeOn -> RXS_CreateChallenge), and aborting our conn requires locking every call on the conn. So instead we just propagate an error up to our callers, and we abort just the call we have. - For RXS_GetChallenge, we cannot abort the conn when rxi_ChallengeEvent is called directly, because the caller will have the call locked. But when rxi_ChallengeEvent is called as an event (when we retry sending the challenge), we can. - For RXS_SetConfiguration, propagate the error up to our caller. Update all rx_SetSecurityConfiguration callers to record and handle the error; all of these are during initialization of daemons, so have them log an error and exit. Reviewed-on: https://gerrit.openafs.org/13522 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 635594d6cceba6de4e09be5a9e9b908f7d16697d) Change-Id: I800516335f6ab0d01d2b29dd0ceba9213dafde59 Reviewed-on: https://gerrit.openafs.org/15300 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Mark Vitale Reviewed-by: Benjamin Kaduk Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 48d9848c5eef99bf1d8552acc055d3b91b2fbcc0 Author: Yadavendra Yadav Date: Wed Jul 7 12:32:36 2021 -0400 LINUX: defer afs_remunlink when current->fs==NULL afs_remunlink is called to delete a file on the fileserver after it has been silly-renamed (due to being unlinked while the file is open). Sometimes current->fs is NULL when this happens, typically when the process is shutting down, after current->fs has been freed and file handles are getting released. During afs_remunlink, we need to interact with our cache files, and so we call dentry_open, which calls security_file_open, which calls into the configured LSM for security checks. Certain LSMs (e.g. Crowdstrike Falcon) will panic the kernel in this situation if current->fs is NULL. There's no way to skip the LSM hooks, or to flag to the LSM that we're making an in-kernel VFS call, so the only way to avoid these panics is to do our I/O in another thread. Fortunately, we already have a way to defer afs_remunlink calls to a background daemon (CUnlinkedDel), since we already do this in some cases (when someone else is holding afs_xvcache or afs_xdcache). So, to avoid the panic in the above scenario, defer calls to afs_remunlink to a background daemon using CUnlinkedDel when current->fs is NULL, and we're using a disk cache. More details on this issue is discussed at following thread: https://lists.openafs.org/pipermail/openafs-info/2021-March/043073.html Reviewed-on: https://gerrit.openafs.org/14691 Tested-by: BuildBot Tested-by: Jonathan Billings Reviewed-by: Benjamin Kaduk Reviewed-by: Andrew Deason (cherry picked from commit 9e043e1a0cdca7624de3e27872273263c57027ed) Change-Id: If85d992c2639e59af7578ebc295f91d4f8462b69 Reviewed-on: https://gerrit.openafs.org/15295 Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit b1bbe87643462ae88f8564044d9bff2703fd5123 Author: Mark Vitale Date: Sat Mar 27 00:00:17 2021 -0400 afs: write-lock vcache->lock in afs_InactiveVCache Since the original IBM code import, the comments for afs_InvalidateAllSegments indicate that vcache->lock W should be held at entry. However, even back then, only LINUX and IRIX honored this requirement when the 'inactive' vnode operation reached afs_InvalidateAllSegments. Over the years, a number of commits have changed the operation and locking for the LINUX inactive vnode op: 5293aa35617a6ad35980ce16fdf492ea960cc18a linux-iput-and-glock-changes-20010130 e8591334602e5e8dad78dc6426d3c44d564572c1 linux-osi-clear-inode-locking-fix-20010816 652f3bd9cb7a5d7833a760ba50ef7c2c67214bba linux-dynamic-inodes-20050710 e0d9e434bb778a2507c1cd6d96c1faa2071f2b2c put-inode-speedup-20050815 b21c13dc3ab751118220dc31276995050841a1ae linux-dentry-iput-20060813 Eventually, ac52e2f3c0bec9298d020de963036409165f380e linux-dont-lock-around-inactivevcache-20061010 removed the vcache->lock from afs_dentry_iput (the current OpenAFS handler for inactive vcaches). The commit message states: "iafs_InactiveVCache() [sic] calls afs_InvalidateAllSegments() which says it should be called with the vnode locked. so the lock should probably be moved to afs_InactiveVCache() so it can be droppped before calling afs_remunlink()." Unfortunately, the vcache->lock was never moved to afs_InactiveVCache. Finally, 3be5880d1d2a0aef6600047ed43d602949cd5f4d 'afs: Avoid panics in afs_InvalidateAllSegments' introduced a background operation BInvalidateSegments that contains an assert for vcache->lock. This assert has exposed the existing lack of proper locking for some paths to afs_InvalidateAllSegments by causing a kernel panic: d_iput -> afs_dentry_iput -> afs_InactiveVCache -> afs_InvalidateAllSegments -> afs_BQueue(BOP_INVALIDATE_SEGMENTS..) -> BInvalidateSegments -> osi_Assert(WriteLocked(&vcache->lock)) Prevent the panic by modifying afs_InactiveVCache to obtain vcache->lock W before calling afs_InvalidateAllSegments, and dropping it before calling afs_remunlink. Thanks to Chaskiel Grundman for reporting and diagnosing the problem. Reviewed-on: https://gerrit.openafs.org/14584 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit f02be4e3b89382317a3baa496f9cb672cdb4b32a) Change-Id: I38dc6e5d70b1743b96d2a227d28e58d1950b5835 Reviewed-on: https://gerrit.openafs.org/15324 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Mark Vitale Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk Reviewed-by: Stephan Wiesand commit 1023b96ab1ea842c883c070e6197e71826dbe8be Author: Marcio Barbosa Date: Wed Apr 20 13:06:17 2022 +0000 cmdebug: Print AFSFid fields as unsigned integers Currently, AFSFid fields are printed as signed integers. As a result, large numbers can be erroneously printed as negative numbers. To fix this problem, print AFSFid fields as unsigned integers. Reviewed-on: https://gerrit.openafs.org/14950 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 29a89c82ad422f88b0898ad07e773dc2e71be983) Change-Id: Ieb303354f1332abb8278e62252c4842baa2132c7 Reviewed-on: https://gerrit.openafs.org/15302 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Stephan Wiesand commit d2429aec59fb3cc7d8a2cc94aa9e0ce8256ecb94 Author: Andrew Deason Date: Wed Jun 3 15:53:48 2020 -0500 vol: Introduce and use FDH_BLOCKSIZE A couple of places in src/volser currently have some logic to get the size and blocksize of a file. The existing logic is nontrivial due to platform-specific quirks, and ignores afs_fstat errors. To fix these issue and consolidate the code into one place, introduce a new function, FDH_BLOCKSIZE, which gets the file size and blksize. Update the places in src/volser to use the new function. Reviewed-on: https://gerrit.openafs.org/14662 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 939787565d5be55a8a803043dbc4f27b3f11b906) Change-Id: I32c73e87fa0b6b0b45971e06b8d8c5653f882f7b Reviewed-on: https://gerrit.openafs.org/15303 Reviewed-by: Michael Meffie Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 1eac15a85a50b1c322dd460f5c747538c88c1a31 Author: Cheyenne Wills Date: Mon Jan 10 18:11:58 2022 -0700 afs.h: fix out of tree build failures There are several compiler errors and warnings when building an out of tree program that includes "afs/afs.h". - Errors for unknown type names 'afs_ucred_t' and 'wait_queue_head' .../afs/afs.h:1542:16: error: unknown type name ‘afs_ucred_t’ ... | afs_set_cr_uid(afs_ucred_t *cred, uid_t uid) { .../afs/afs.h:1605:5: error: unknown type name ‘wait_queue_head_t’ ... | wait_queue_head_t cond; - Warnings about declaring structures within missing declarations for the structs: osi_File, dcache and afs_FetchOutput .../afs/afs.h:1486:36: warning: ‘struct osi_file’ declared inside parameter list will not be visible outside of this definition or declaration ... | int (*read)(void *rock, struct osi_file *tfile, afs_uint32 offset, - Unable to find the file for the include opr/jhash.h The missing type name 'afs_ucred_t' is due to miss-placed declarations for some kernel only functions. The type name 'wait_queue_head' is a data type for Linux kernel modules. The warnings for the missing declarations are due to either references to the structures before they are declared, or because they are not available in any of the other public header files. To fix the unknown type name afs_ucred_t, relocate the function declarations that reference 'afs_ucred_t' into the KERNEL only section (since afs_ucred_t is a kernel specific type). To fix the unknown type name 'wait_queue_head', relocate the afs_event structure and the afs_evhasht variable to be within the KERNEL only section. To resolve the warnings associated with the structures, simply declare the structure names before they are referenced. All references that are resulting in the warnings are declarations for pointers. Relocate the include for opr/jhash.h and the define for VCSIZE into the kernel block. Reviewed-on: https://gerrit.openafs.org/14857 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit 92342b099dd5ea539efc5ad119d36a87647c0895) Change-Id: Ib321796e473495d7d8774133c5e690b53bb26c17 Reviewed-on: https://gerrit.openafs.org/15299 Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 80cb460a8b434fa7fb2dacf642d54de1c0af5314 Author: Andrew Deason Date: Sun Apr 5 16:29:52 2020 -0500 libafs: Serialize INSTDIRS/DESTDIRS and COMPDIRS Our libafs build logic involves a few targets that 'cd' into a per-kernel subdir: notably INSTDIRS and DESTDIRS (the targets to 'make install' or 'make dest' our kernel modules) and COMPDIRS (the target to setup/build the kernel module). Both of these potentially 'cd' into a subdirectory (e.g. MODLOAD64), and run some make rules. Since INSTDIRS and COMPDIRS are different targets and don't depend on each other for many platforms, running those rules can happen in parallel. After they 'cd' into the relevant dir, they run a new 'make' in a subshell, and so underlying rules for building e.g. AFS_component_version_number.c are not serialized. So for a parallel build on, say, Solaris, we can encounter errors when two sub-makes try to make AFS_component_version_number.c at the same time, which looks something like this (with various lines output from other sub-processes mixed in): cd src && cd sys && gmake install gmake[3]: Leaving directory '/[...]/src/libuafs' rm -f AFS_component_version_number.c.NEW /opt/developerstudio12.6/bin/cc [...] -D_KERNEL -DSYSV -dn -m64 -xmodel=kernel -xvector=%none -xregs=no%float -Wu,-save_args -o AFS_component_version_number.o -c AFS_component_version_number.c mv: cannot access AFS_component_version_number.c.NEW gmake[4]: *** [/[...]/src/config/Makefile.version:13: AFS_component_version_number.c] Error 2 gmake[4]: Leaving directory '/[...]/src/libafs/MODLOAD64' gmake[3]: *** [Makefile:85: solaris_instdirs] Error 2 gmake[3]: *** Waiting for unfinished jobs.... To avoid this, just make INSTDIRS and DESTDIRS depend on COMPDIRS, so we can make sure they don't run at the same time. Reviewed-on: https://gerrit.openafs.org/14137 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 3db8c37e8ef6bea0f03ef6b8f82ed93d52937d7d) Change-Id: Ied7875e885f51a6d3f00d65f1783df9439a18ae3 Reviewed-on: https://gerrit.openafs.org/15298 Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 30dc7fd2acbe756d5e618a6da484f0eebaf07e07 Author: Andrew Deason Date: Sat Sep 22 01:58:17 2018 -0500 SOLARIS: Fix libafs $(KOBJ) parallel make race Currently, our COMPDIRS make rule for SOLARIS libafs builds looks like this: ${COMPDIRS} ${INSTDIRS} ${DESTDIRS}: for t in $(KOBJ) ; do # set some variables ; \ cd $$t ; \ $(MAKE) $@_libafs || exit $$? ; \ cd ../ ;\ done And Makefile.common has this: all: setup $(COMPDIRS) Where the 'setup' rule creates the $(KOBJ) dirs and sets up some symlinks. For parallel builds, this means that our commands in the ${COMPDIRS} target can be running in parallel with the 'setup' target, and so our $(KOBJ) dirs may not exist by the time we try to 'cd $$t'. For single-KOBJ platforms this actually largely works, since the 'cd' will fail, but then the subsequent 'make' will run (just in the wrong dir), but this can cause us to wastefully re-compile the same source files (and cause some possibly confusing error messages). For platforms with multiple KOBJs, this causes obvious problems, since we don't cd into each KOBJ dir. To solve this, just have the ${COMPDIRS}/etc rule depend on setup, so we know that 'setup' has finished running. Also change our way of 'cd'ing into each KOBJ dir to actually cause the rule to fail, to make any errors here more obvious and consistent. Reviewed-on: https://gerrit.openafs.org/13344 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 00aa9200be86b187c903503e56b2af55639ea2b8) Change-Id: I4b68cc8aa7b50f792152c2c00da6c6e3684755b7 Reviewed-on: https://gerrit.openafs.org/15297 Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 69839045c269af1b7023159e78dbc59e13e6202a Author: Cheyenne Wills Date: Wed Feb 9 14:00:13 2022 -0700 autoconf: Additional library test for ncurses Depending on how the ncurses libraries were built the external symbol 'LINES' may be replaced with the '_nc_LINES' external symbol. Because the symbol 'LINES' may or may not be present, the autoconf test can fail to detect the correct libraries needed for curses support. Add an additional AC_CHECK_LIBs for the symbol _nc_LINES (within the ncurses or tinfo libraries) when setting the $LIB_curses. This commit was adapted from the openSuSE source packaging for openafs. Background: when ncurses is built with --enable-reentrant, LINES is defined as a C preprocessor macro that expands to a call to _nc_LINES Reviewed-on: https://gerrit.openafs.org/14889 Tested-by: BuildBot Reviewed-by: Ralf Brunckhorst Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit c98994dd116121af75f6df6891e706957c6c953d) Change-Id: I6eb15897f48eb93d72739965c10b5f51b21d7336 Reviewed-on: https://gerrit.openafs.org/15296 Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit f7625760d515a4954596526e78b9a8c2a9e9ec13 Author: Stephan Wiesand Date: Wed Jan 18 14:18:08 2023 +0100 afs: check for non-NULL before memset in afs_LookupName Commit 981bc005f8161ca9ee52ea281c7d73e0e4e2461a refactored PNewStatMount and PFlushMount by moving their common logic to a new function afs_LookupName(). In this function, the output parameters are zeroed. However, this is done before checking that their pointers are valid. Add additional checks before memset(). Reviewed-on: https://gerrit.openafs.org/15283 Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit e2890626bc11964dd96cde0d7d8dd7fdfcf90857) Change-Id: I213ea7e23e01e7902919919581ad1d8e596303a2 Reviewed-on: https://gerrit.openafs.org/15292 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit cba2b88851c3ae0ab1b18ea3ce77f7f5e8200b2f Author: Jeffrey Hutzelman Date: Tue Mar 1 10:31:14 2022 -0500 LINUX 5.13: set .proc_lseek in proc_ops When using the proc_ops structure, set .proc_lseek explicitly rather than leaving it unset. This field has always been present in proc_ops, but prior to Linux 5.13, it could be unset, causing default_llseek to be used. Starting with commit d4455faccd6 (proc: mandate ->proc_lseek in "struct proc_ops"), this field is now mandatory. This fixes a problem which would cause an oops if llseek(2) is called on /proc/fs/openafs/afs_ioctl. Reviewed-on: https://gerrit.openafs.org/14918 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 68851b782ca2cb5e4ae7457255841f44f3bef15c) Change-Id: Ifd3a517f595cfef7fd9dd1fdd3f3aca8fe1bc25f Reviewed-on: https://gerrit.openafs.org/15286 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit b885159cc2bc6c746aec1d54cdd8a515d1115d14 Author: Cheyenne Wills Date: Wed Dec 14 13:40:48 2022 -0700 Linux: Replace lru_cache_add with folio_add_lru The Linux 6.2 commit: "folio-compat: remove lru_cache_add()" (6e1ca48d0) removed the lru_cache_add() function (which was introduced in Linux 5.8) The replacement function is folio_add_lru(), which was introduced with the Linux 5.16 commit: "mm/lru: Add folio_add_lru()" (0d31125d2d) Reviewed-on: https://gerrit.openafs.org/15227 Reviewed-by: Benjamin Kaduk Tested-by: Benjamin Kaduk (cherry picked from commit cfac0df9cd7152be2672c665442aac84215494d6) Change-Id: I74535bf83cdd47c9dd60a7114ec7694ae9981c9b Reviewed-on: https://gerrit.openafs.org/15281 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit f0fee2c7752d18ff183d60bcfba4c98c3348cd5f Author: Cheyenne Wills Date: Fri Nov 18 08:41:50 2022 -0700 Linux: Check for block_dirty_folio The build for the openafs Linux kernel module fails on RHEL9.1 with an undefined function reference for block_dirty_folio(). RedHat 9.1 includes the Linux commit: fs: Add aops->dirty_folio (6f31a5a261db) which added the dirty_folio member to the address_space_operations structure. However RedHat 9.1 does not include the following 2 Linux commits: fs: Convert __set_page_dirty_buffers to block_dirty_folio (e621900ad2) which introduced block_dirty_folio() as a function that could be used to handle the address_space_operations's dirty_folio operation. And fs: Remove aops ->set_page_dirty (3a3bae50af) which removed the set_page_dirty member in the address_space_operations structure. The openafs commit: Linux-5.18 replace set_page_dirty with dirty_folio (6aa129e743e88) introduced an autoconf test that checks for the presence of aops' dirty_folio member and assumed that the Linux function block_dirty_folio() was also provided (since all three of the above Linux commits were added in Linux-5.18-rc1). Without the (e621900ad2) commit, the openafs Linux kernel module fails to build since block_dirty_folio() is not defined by Linux. Introduce new autoconf tests that checks for the presence of the block_dirty_folio() function. Change the preprocessor conditional within LINUX/osi_vnodeops.c to only use dirty_folio if aops has dirty_folio and block_dirty_folio() is available. When block_dirty_folio() is not available, we continue to use the older set_page_dirty method, which remains a valid method until its removal by the (3a3bae50af) Linux commit. Note: Reviewing the Linux source for RedHat 9.1 shows that there is only one location that is defining the dirty_folio member and it is providing its own function instead of relying on block_dirty_folio. Reviewed-on: https://gerrit.openafs.org/15199 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit e7737edb932a1c4d55a2551a44e481b40310c96d) Change-Id: If29ad539c5530289ffa49aa1fa489f612e9f5c78 Reviewed-on: https://gerrit.openafs.org/15228 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 9d217903f0c7f6b260f166fad6dbf77c67df7c2d Author: Marcio Barbosa Date: Thu Feb 13 00:39:00 2020 -0300 vos: take RO volume offline during convertROtoRW The vos convertROtoRW command converts a RO volume into a RW volume. Unfortunately, the RO volume in question is not set as "out of service" during this process. As a result, accesses to the volume being converted can leave volume objects in an inconsistent state. Consider the following scenario: 1. Create a volume on host_b and add replicas on host_a and host_b. $ vos create host_b a vol_1 $ vos addsite host_b a vol_1 $ vos addiste host_a a vol_1 2. Mount the volume: $ fs mkmount /afs/.mycell/vol_1 vol_1 $ vos release vol_1 $ vos release root.cell 3. Shutdown dafs on host_b: $ bos shutdown host_b dafs 4. Remove RO reference to host_b from the vldb: $ vos remsite host_b a vol_1 5. Attach the RO copy by touching it: $ fs flushall $ ls /afs/mycell/vol_1 6. Convert RO copy to RW: $ vos convertROtoRW host_a a vol_1 Notice that FSYNC_com_VolDone fails silently (FSYNC_BAD_STATE), leaving the volume object for the RO copy set as VOL_STATE_ATTACHED (on success, this volume should be set as VOL_STATE_DELETED). 7. Add replica on host_a: $ vos addsite host_a a vol_1 8. Wait until the "inUse" flag of the RO entry is cleared (or force this to happen by attaching multiple volumes). 9. Release the volume: $ vos release vol_1 Failed to start transaction on volume 536870922 Volume not attached, does not exist, or not on line Error in vos release command. Volume not attached, does not exist, or not on line To fix this problem, take the RO volume offline during the vos convertROtoRW operation. Reviewed-on: https://gerrit.openafs.org/14066 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 32d35db64061e4102281c235cf693341f9de9271) Change-Id: I00a99819ac7d1d981695da3eae1bd60de1cb53ae Reviewed-on: https://gerrit.openafs.org/15233 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 5a48ce589a24f2280b085e50718b05d08db918bd Author: Marcio Barbosa Date: Fri Mar 6 15:15:38 2020 +0000 vol: fix namei_ConvertROtoRWvolume return code Commit 8632f23d6718a3cd621791e82d1cf6ead8690978 introduced checks for the return value of snprintf calls in namei_ops. On success, the value returned by this function represents the number of written characters. Unfortunately, the variable used to store this value is the same variable that represents the status code returned by namei_ConvertROtoRWvolume. Consequently, a successful execution of namei_ConvertROtoRWvolume results in a status code different the 0 (and equal to the number of written characters). To fix this problem, set the status code in question back to 0 after a successful execution of namei_ConvertROtoRWvolume. Reviewed-on: https://gerrit.openafs.org/14065 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 957b06984b77cba74bd90217b723220c1844809b) Change-Id: If82cf4d2983e7b6f8975ca4a9fa104ee5e36b917 Reviewed-on: https://gerrit.openafs.org/15232 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 3084117f10bd62acb1182cb54fc85b1d96738f70 Author: Cheyenne Wills Date: Fri Nov 4 08:33:39 2022 -0600 Linux: Fix functions without prototypes The Linux kernel build has -Wstrict-prototypes enabled and flags functions without a proper prototype. With clang-16 these warnings are reported as errors when the kernel is configured with CONFIG_WERROR or when openafs is configured with --enable-checking. src/libafs/MODLOAD-6.1.0-rc3-SP/osi_alloc.c:339:32: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes] osi_linux_verify_alloced_memory() ^ void Update function prototypes to comply with -Wstrict-prototypes. There are no functional changes with this commit. Reviewed-on: https://gerrit.openafs.org/15194 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 63db2de22ef75292463ec1f0979e32afc05d0b95) Change-Id: I2e9c09c3b88ca3597720b1d8885537600d307418 Reviewed-on: https://gerrit.openafs.org/15275 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit c990b0d086632aef51585beabb42fd9ff22d1fc4 Author: Cheyenne Wills Date: Thu Dec 1 10:00:06 2022 -0700 libadmin: Fix RPCStatsStateGet 'rpc' prototype clang-16 is flagging a incompatible-function-pointer-types warning which results in build errors when --enable-warning is turned on. client.c:498:13: error: incompatible function pointer types passing 'int (struct rx_connection *, afs_int32 *)' (aka 'int (struct rx_connection *, int *)') to parameter of type 'int (*)(struct rx_connection *, afs_RPCStatsState_p)' (aka 'int (*)(struct rx_connection *, afs_RPCStatsState_t *)') [-Wincompatible-function-pointer-types] (conn, RXSTATS_QueryPeerRPCStats, &state, &st)) { ^~~~~~~~~~~~~~~~~~~~~~~~~ Update the 'util_RPCStatsStateGet()' function's parameter to match the function type for the RPC functions actually being called. Reviewed-on: https://gerrit.openafs.org/15180 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit 97f0a20e50f027fe00adb22c39b71f0ac79f1ff7) Change-Id: Icbbbd137fa6a404090ef7af94621100bb552d502 Reviewed-on: https://gerrit.openafs.org/15274 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 973c5c585f59c0e88a2852d290abcb5e8fdf2b86 Author: Cheyenne Wills Date: Thu Dec 1 12:09:09 2022 -0700 clang-16: Fix simple unused-but-set variables Clang-16 is flagging variables as unused-but-set-variables resulting in build errors when --enable-warning is used. db_verify.c:996:9: error: variable 'builtinUsers' set but not used [-Werror,-Wunused-but-set-variable] int builtinUsers = 0; ^ Remove the variables that are set but never actually used. This commit fixes the simpler cases where variables are only set but not used elsewhere. Reviewed-on: https://gerrit.openafs.org/15178 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit afafde158ff875d2459bb81ac373cde3e45dac03) Change-Id: I65cd27325b768ba192831401f4ac71e94071ecc7 Reviewed-on: https://gerrit.openafs.org/15273 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit f336d0aa01d208b1a7f3c1c509e2bd5d4d11f095 Author: Cheyenne Wills Date: Wed Nov 2 14:47:04 2022 -0600 clang-16: Fix conditionally unused-but-set variables clang-16 is flagging unused-but-set variables which result in build errors when --enable-warning is turned on. remote.c:485:15: error: variable 'pass' set but not used [-Werror,-Wunused-but-set-variable] afs_int32 pass; ^ These variables are actually used in specific cases depending on build configuration (e.g. AFS_PTHREAD_ENV, etc.). Relocate these variables so they are fully defined or referenced within preprocessor '#if' blocks. Reviewed-on: https://gerrit.openafs.org/15177 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 97018ace991d300a6ff75a1dcd1a69b4044f2b89) Change-Id: Iee3a196d9c23a8725171db4a3a884a077f0e95ac Reviewed-on: https://gerrit.openafs.org/15277 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit fb3071563922df8172bab261e8f0c3e3e779b666 Author: Cheyenne Wills Date: Thu Dec 1 09:05:58 2022 -0700 clang-16: Fix unused-but-set 'for' control vars clang-16 is flagging unused-but-set variables which result in build errors when --enable-warning is turned on. Several of these variables are used within 'for(..)' loops but are not actually referenced anywhere else. fcrypt.c:181:16: error: variable 'i' set but not used [-Werror,-Wunused-but-set-variable] afs_uint32 i, j; ^ Refactor the for statements to eliminate the unused variables. Note, this commit is a little more complex than simply removing unused variables. Reviewed-on: https://gerrit.openafs.org/15176 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit 05eb420829f9bca155c1d5af9fe96844db974770) Change-Id: I80506cb8ae1c4bef67225eb11e3f640e8de52d26 Reviewed-on: https://gerrit.openafs.org/15271 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit b87081682dcc3035889c799d9752c6b35bdda87b Author: Cheyenne Wills Date: Mon Nov 14 15:55:41 2022 -0700 crypto: Define krb5_keytype as krb5_enctype When building with clang-16 and configured with --enable-checking, the external source heimdal/krb5/crypto.c used in src/crypto/rfc3961 fails with the following error: src/external/heimdal/krb5/crypto.c:702:28 error: implicit conversion from enumeration type 'krb5_enctype' (aka 'enum ENCTYPE') to different enumeration type 'krb5_keytype' (aka 'enum krb5_keytype') [-Werror,-Wenum-conversion] *keytype = e->keytype->type; /* XXX */ ~ ~~~~~~~~~~~~^~~~ Replace the enum definition of krb5_keytype with a typedef to krb5_enctype and create an anonymous enum mapping of KEYTYPE_ARCFOUR to ETYPE_ARCFOUR_HMAC_MD5. It should be noted that krb5_keytype and KEYTYPE_ARCFOUR are only used by the external file src/external/heimdal/krb5/crypto.c Changing the type for krb5_keytype was suggested by Andrew Deason (adeason@sinenomine.net). Reviewed-on: https://gerrit.openafs.org/15189 Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit c9ac7cdfb6365e3fc1914de80019a10328de1f4f) Change-Id: I15a793b35cfa920e8db1a99c5575b4f3f55be0dd Reviewed-on: https://gerrit.openafs.org/15270 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 334debcd4c9032aa7c71bb79bce2be8acafe78e2 Author: Cheyenne Wills Date: Wed Nov 2 14:53:21 2022 -0600 dumptool: Remove unused 'sflag' variable clang-16 is flagging unused-but-set variables which result in build errors when --enable-warning is turned on. ./dumptool.c:1285:54: error: variable 'sflag' set but not used [-Werror,-Wunused-but-set-variable] int errflg = 0, lflag = 0, iflag = 0, Fflag = 0, sflag = 0, Rflag = 0; Within dumptool the '-s' option of the 'ls' subcommand sets the 'sflag' variable, but the variable itself is never used anywhere else. Remove the variable 'sflag', and ignore the '-s' option. The sflag variable was unused in the commit that introduced the code: "test-suite-pull-tools-directly-in-20020114" (fcb32c07ed6d) Reviewed-on: https://gerrit.openafs.org/15181 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 3e9d41c98ecf07519ff6d2a1413615547ace13b8) Change-Id: I4cd4584c6374a525714d392f98fb39be5406bdbc Reviewed-on: https://gerrit.openafs.org/15269 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 241dcae439cb1646f053391b3ee57553003cf6fa Author: Cheyenne Wills Date: Fri Oct 28 17:53:15 2022 -0600 libuafs: include com_err.h in ukernel_swig.i clang-16 is flagging an implicit-function-definition which results in a build error when --enable-warning is turned on. PERLUAFS/ukernel_swig_perl.c:1585:9: error: call to undeclared function 'afs_com_err'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] afs_com_err("AFS::ukernel", code, "parsing line: '%s'", line); ^ Add an include for afs/com_err.h to resolve the warning. Reviewed-on: https://gerrit.openafs.org/15179 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 4be3e5d31fa3fbe6c80ad0973430074124b157bc) Change-Id: I62785fe6248cb4b26f680c2db044f59511a1e02e Reviewed-on: https://gerrit.openafs.org/15268 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 0b908b7b9b39e36fc1bf98701d7e28d9a7a2f310 Author: Cheyenne Wills Date: Fri Nov 4 08:24:09 2022 -0600 rx: Remove event_handler rx_pthread_* counters The event_handler() function contains several counters that are set and incremented but are not actually used. Clang-16 is flagging these with a 'unused-but-set-variable' warning resulting in build errors when --enable-warnings is used. rx_pthread.c:136:19: error: variable 'rx_pthread_n_event_expired' set but not used [-Werror,-Wunused-but-set-variable] unsigned long rx_pthread_n_event_expired = 0; Several 'if' statements are used to conditionally set these variables, but serve no other purpose. These 'if' statements can also be eliminated. Remove the unused rx_pthread_* counter variables as well as the associated 'if' statements. In addition the only purpose of the 'error' variable was to conditionally increment one of the removed variables, remove the 'error' variable. These variables have been 'unused but set' since the original commit from IBM. Reviewed-on: https://gerrit.openafs.org/15175 Reviewed-by: Benjamin Kaduk Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Andrew Deason (cherry picked from commit f7cb492c7e755ec91226c96cc82ad9f567f01f11) Change-Id: I4dfdd7e536f6af642789fc51f6f055652c63a46d Reviewed-on: https://gerrit.openafs.org/15267 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 5af53db475cdf4350d1cc41c9d4d955156eced57 Author: Mark Vitale Date: Sun Jan 26 20:17:40 2020 -0500 afs: silence bogus warning about dcListCount uninitialized Commit 3be5880d1d2a0aef6600047ed43d602949cd5f4d 'afs: Avoid panics in afs_InvalidateAllSegments' is correct, but at least one compiler (gcc 4.3.4 on SLES 11.3) is fooled into issuing a warning: [...]/afs_segments.c: In function 'afs_InvalidateAllSegments_once': [...]/afs_segments.c:506: error: 'dcListCount' may be used uninitialized in this function To silence the bogus warning, initialize dcListCount when defined. Reviewed-on: https://gerrit.openafs.org/14048 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Benjamin Kaduk (cherry picked from commit 09ec1073b4c5d2eb70dcf5d8063018bc82e5a35e) Change-Id: I84b1d4b8b9041242d64b03a84ad4392ff9778950 Reviewed-on: https://gerrit.openafs.org/15266 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 05a4adcdffaa75827fbdd80ab7b54195a2f0d243 Author: Ganesh Chaudhari Date: Fri Oct 7 21:52:40 2022 +0530 macos: Update postinstall instructions for MacOS 13 System preferences is getting replaced by System settings in MacOS 13. So, this commit will address the required changes in the dialog box which gets popped after installing OpenAFS. Signed-off-by: Ganesh Chaudhari Reviewed-on: https://gerrit.openafs.org/15150 Tested-by: BuildBot Reviewed-by: Marcio Brito Barbosa Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit c620c91416f726357d556ce043b6cc285cf87a8b) Change-Id: I6d8da31dc3735cab93c2b2226d436960c77b78ff Reviewed-on: https://gerrit.openafs.org/15264 Reviewed-by: Ganesh G. Chaudhari Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 9c6503e117f52dba91e10a09eb8d28c428550e34 Author: Ganesh Chaudhari Date: Fri Oct 7 19:13:34 2022 +0530 macOS: Add support for aarch64-*-darwin* sysname As of libtool 2.4.7, the supplied config.guess file modifies the sysname returned on macOS arm64 from arm-*-darwin* to aarch64-*-darwin*. As a result, trying to build OpenAFS on macOS arm64 fails with the following message: configure: error: An AFS sysname is required To avoid this problem, added support for aarch64-*-darwin*. Signed-off-by: Ganesh Chaudhari Reviewed-on: https://gerrit.openafs.org/15149 Reviewed-by: Marcio Brito Barbosa Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit d38b068627f5e84cead88af85f904fea0c8edb6d) Change-Id: I7685c2b75f62fe28b8723e00fba22f5f7fe795f1 Reviewed-on: https://gerrit.openafs.org/15263 Reviewed-by: Ganesh G. Chaudhari Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 41e46e12ac74fab70c692cf475aad13be0bdb518 Author: Ganesh Chaudhari Date: Wed Sep 14 15:57:27 2022 +0530 macos: Add support for MacOS 13.0 (Ventura) This commit introduces the new set of changes / files required to successfully build the OpenAFS source code on OS X 13.0 “Ventura”. Thank you Kailas Zadbuke (IBM) and Harish Sharma (IBM) for your help. Reviewed-on: https://gerrit.openafs.org/15139 Tested-by: BuildBot Reviewed-by: Marcio Brito Barbosa Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit e5a97ef2b46c8821db81363f4917ef214fc34a5e) Change-Id: I5092fe02a3bc3b7a6cb4ecfd4c8660278da9b0e8 Reviewed-on: https://gerrit.openafs.org/15262 Reviewed-by: Ganesh G. Chaudhari Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit f6b088d2a7fe7fcabeb6b4635c8a01072c7219c4 Author: Marcio Barbosa Date: Sun Jun 20 00:52:36 2021 -0300 klog.krb5: remove "save and reuse password" logic In order to avoid repeated requests for the user's password, klog.krb5 caches and reuses it whenever necessary. However, with the introduction of commit 3a9a5783cd1fd73902655f0876e2069b42688c94, klog.krb5 always requests a TGT regardless of the state of writeTicketFile, eliminating the need for possible extra requests for the user's password. Moreover, krb5_get_init_creds_password() does not accept a custom prompter on macOS (returns EINVAL). Consequently, if the -password argument is omitted, klog.krb5 fails with the following error: klog: Invalid argument Unable to authenticate in realm Given that the user won't be prompted for a password multiple times, remove the "save and reuse password" logic and use krb5_prompter_posix() as the prompter function (instead of klog_prompter). Relevant issue identified by gangovind@in.ibm.com. Reviewed-on: https://gerrit.openafs.org/14643 Tested-by: BuildBot Reviewed-by: Ganesh G. Chaudhari Tested-by: Ganesh G. Chaudhari Reviewed-by: Benjamin Kaduk (cherry picked from commit a10f99dbe025c74fb488b501daaf1f9574830cec) Change-Id: I6587283d93a2dc801c8a41f0663a6de1b5d8a045 Reviewed-on: https://gerrit.openafs.org/15261 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 69f1ffb8989d8f1ac9a5ac4ea9459c358478e61d Author: Marcio Barbosa Date: Thu Apr 7 22:51:21 2022 +0000 DARWIN: On macOS 12, mount afs on user's directory Currently, /afs is mounted/unmounted by a LaunchDaemon. In order to unmount /afs on restart/shutdown, this daemon runs umount -force /afs. Unfortunately, SIP (System Integrity Protection) is not allowing the LaunchDaemon in question to run this command successfully on macOS 12 (exclusively on restart/shutdown):   umount: Operation not permitted In this situation, afs can't be turned off correctly, leaving many unkillable afsd processes lingering around. As a result, the restart/shutdown process gets stuck indefinitely. Fortunately, this problem doesn't happen if /afs is mounted on an user's directory. That said, avoid this issue by mounting /afs on the current user's directory (/Users/$USER/OpenAFS/afs). Notice that afs is still accessible (including for other users) through a synthetic link added in the root directory (/afs -> /Users/$USER/OpenAFS/afs). Reviewed-on: https://gerrit.openafs.org/14925 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 1c7eda8ea83bee3e674435109efccbc6082e4765) Change-Id: Idb013d76f00a78cfebd790900eabbcd6968029b7 Reviewed-on: https://gerrit.openafs.org/15260 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit fd64dcd3fb49e5575bf0ac8f0bb36857953c4f8a Author: Marcio Barbosa Date: Tue Mar 15 10:58:16 2022 -0300 macos: Packaging support for MacOS X 12.0 This commit introduces the new set of changes / files required to successfully create the dmg installer on OS X 12.0 "Monterey". Reviewed-on: https://gerrit.openafs.org/14924 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 873d803a3dc7acffd74c9432872bed4f6575abf9) Change-Id: I4cbbbeb5eb740b4f7979fa2137cb7faa9027d774 Reviewed-on: https://gerrit.openafs.org/15259 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 046e787f1f87c6e18676510f7f89206ead1069bb Author: Marcio Barbosa Date: Thu Apr 7 03:16:45 2022 +0000 macos: Add support for MacOS 12.0 This commit introduces the new set of changes / files required to successfully build the OpenAFS source code on OS X 12.0 "Monterey". Reviewed-on: https://gerrit.openafs.org/14923 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 7a862f940b2e2f2169e267fc6deb31db8f3534c0) Change-Id: I4f1b42002c670e15b3fecfd8d0cfb2f461b8d136 Reviewed-on: https://gerrit.openafs.org/15258 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit fc80c74689ae6be3f428401aec071f0a273d4bff Author: Mark Vitale Date: Tue May 12 12:59:31 2020 -0400 DARWIN: disable kextutil check for versions requiring notarization Our kextutil signing check will fail for releases that require notarization (Mojave 10.14.5 and up, Catalina 10.15 all versions), because we aren't notarized yet at the time of the check. Instead, disable the check for those releases. Reviewed-on: https://gerrit.openafs.org/14222 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit d2e755e33a266df17169a1fc05db1e540b5e76af) Change-Id: Ie191503cb3f57c60a2a9c31e638dc7f79c496591 Reviewed-on: https://gerrit.openafs.org/15257 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 6652a632795aa23e1894c049f2d48c0881968add Author: Mark Vitale Date: Sun May 10 20:53:22 2020 -0400 DARWIN: ensure OpenAFS.pkg is signed Installation fails because the OpenAFS.pkg was inadvertently omitted from the codesign logic. Ensure that the package is signed. Reviewed-on: https://gerrit.openafs.org/14221 Reviewed-by: Marcio Brito Barbosa Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 336f5d91c6f4e93f77560d456fb29fbd82b237e5) Change-Id: I58c0ca157653b76562ee7071a567db681d33fc2e Reviewed-on: https://gerrit.openafs.org/15256 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit d20def23d094b11b88265d1f7430fc5e4d55484a Author: Mark Vitale Date: Sun May 10 20:51:59 2020 -0400 DARWIN: ensure PrefPane materials are properly signed Notarization fails because some prefPane materials were inadvertently omitted by the codesign logic. Ensure that these objects are properly signed. Reviewed-on: https://gerrit.openafs.org/14220 Reviewed-by: Marcio Brito Barbosa Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit d3f8d8122880de9f5b25868b39efd1cc7d385ff6) Change-Id: Ice6c954e41e375fbe8ac670586d2616c565f0499 Reviewed-on: https://gerrit.openafs.org/15255 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 35fde5873a1a9327333d15af399738ae55680e22 Author: Marcio Barbosa Date: Tue Mar 15 10:38:45 2022 -0300 DARWIN: Replace afs_osi_cred by allocated ucred Building the current version of OpenAFS on macOS Monterey arm64 results in the following error: error: globals with authenticated null values are currently unsupported afs_ucred_t afs_osi_cred; To avoid this problem, replace the global in question by a pointer to a dynamically allocated afs_osi_cred (afs_osi_credp). Ideally we would create a new credential with kauth_cred_create(), but this function is not well documented and using it results in crashes. Moreover, if the kauth_cred_dup() function were still available (private since XNU 1456.1.26 - macOS 10.6), we could also duplicate the current user's credential during startup (like commit f40f466c7f did for BSD). Reviewed-on: https://gerrit.openafs.org/14922 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 982d2f9dbe6586d06ffa2a61c02ea726b83b5902) Change-Id: I720132478d4d1b742f63576e6a98e96c7a935885 Reviewed-on: https://gerrit.openafs.org/15254 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 29f7182c3fe25db9666871567a631e9173568ac8 Author: Andrew Deason Date: Mon Feb 25 11:35:24 2019 -0600 Remove references to SunOS 4 We already removed support for Solaris versions before Solaris 8, in commit e4c2810f ("Remove support for Solaris pre-8"), but there are still some references to SunOS (meaning SunOS 4) in the tree. This is even older than Solaris (aka SunOS 5), so get rid of these. This commit removes most references to SunOS 4 regarding platform support, and a few comments. This also removes a few comments that were just wrong or nonsensical (e.g. CMAPPED in afs.h is used by other platforms; some comments in platform-specific osi_file.c files referenced SunOS for some reason). Reviewed-on: https://gerrit.openafs.org/13506 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 6e5638ac7297701a99ea396dee1df8f56a6a50da) Change-Id: I17821e2cd0050bb0a468bfadda2c446beafeb537 Reviewed-on: https://gerrit.openafs.org/15253 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 3ee628c2dc5128ac68dd861b439a20db8837cecf Author: Andrew Deason Date: Fri Sep 21 12:11:46 2018 -0500 Remove alpha_dux/alpha_osf references Several files were still referencing the alpha_dux* and alpha_osf* sysnames. The code for these platforms has been removed, so get rid of this cruft. Reviewed-on: https://gerrit.openafs.org/13339 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Benjamin Kaduk (cherry picked from commit 809ee49b80d7bc0e720aaebe78fb9ecfd453065d) Change-Id: Iae1f642df6cfb4c2e757f0fc381cb98eb5bf448e Reviewed-on: https://gerrit.openafs.org/15252 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 8ec429d0a3a7b3169d1eb24eb37e8084e5bc6a4f Author: Marcio Barbosa Date: Mon Mar 21 14:43:34 2022 -0300 DARWIN: Drop afs_event lock before destroying it On macOS arm64, a lock (lck_mtx_t) must be released (lck_mtx_unlock) before it can be destroyed/freed (lck_mtx_free -> lck_mtx_destroy). If this rules isn't respected, the operating system in question will panic with the following message: panic("lck_mtx_assert(): mutex (%p) not owned", lock); Unfortunately, the current shutdown process of the osi_sleep module doesn't respect this rule. As a result, macOS arm64 panics when the OpenAFS client is shut down/restarted. To fix this problem, release afs_event->lck (EVTLOCK_UNLOCK) before destroying it (EVTLOCK_DESTROY). Reviewed-on: https://gerrit.openafs.org/14933 Tested-by: BuildBot Reviewed-by: Mark Vitale Tested-by: Mark Vitale Reviewed-by: Benjamin Kaduk (cherry picked from commit 93b88935999ad25bc22daf64f9ebff30957e0a27) Change-Id: Ib81c3decc748c06b2f99cfa155095bffd1048f57 Reviewed-on: https://gerrit.openafs.org/15251 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit b5dd4df6ec3e87c7f06d214b213e30270a358f13 Author: Marcio Barbosa Date: Thu Apr 7 22:35:02 2022 +0000 macos: Add support for Apple Silicon This commit introduces the new set of changes / files required to successfully build the OpenAFS source code on Apple M1 (macOS 11+). Notice that kexts on Apple silicon must support the arm64e architecture, since they run in kernel space and must support the same architecture and restrictions as other kernel code. On the other hand, the utilities that run on user space, like vos, fs, and others, have to be built for arm64 (currently). Reviewed-on: https://gerrit.openafs.org/14746 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: Andrew Deason (cherry picked from commit cdbcb6f947feff528adc324dd6487b21083e23aa) Change-Id: I854e7553b65956032a3c15aa427189bf8e4e3a0d Reviewed-on: https://gerrit.openafs.org/15250 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 33bcff698f8b12c7830acf969f93eecad52a937f Author: Marcio Barbosa Date: Thu Apr 7 02:15:57 2022 +0000 macos: Refactor param.x86_darwin_200.h In preparation for a future commit, try to make param.x86_darwin_200.h more readable. Also, rename this file to param.darwin_200.h so code from other architectures can be included in this header. Reviewed-on: https://gerrit.openafs.org/14934 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 39b74c2c3725cfa39fc5076cd7803ee7d55923e3) Change-Id: I184591c24fac37b4c5a2b6fab7b42850b3004744 Reviewed-on: https://gerrit.openafs.org/15249 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit b9c3dbc0a60a3295f1622bc79a05938173aa95b4 Author: Marcio Barbosa Date: Mon Feb 14 15:09:27 2022 -0800 build: Select param.h in sysname.m4 Currently, the way the file that will be used as param.h is selected doesn't allow us to choose headers from other architectures, making cross-compiling difficult. In an effort to facilitate this process, select the header that will be used as param.h in sysname.m4. By doing this, we will have more flexibility to select which header should be used (in future commits). Reviewed-on: https://gerrit.openafs.org/14914 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit d456bd9b258445f60745867c34ef7c7a8c7be187) Change-Id: Iaaa372887ac17f352a6a4bb9c14b896e88e3b28b Reviewed-on: https://gerrit.openafs.org/15248 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit 84b177ccc856519a6a1aac7e18cd30514fccac15 Author: Marcio Barbosa Date: Wed Apr 6 23:36:15 2022 +0000 macos: Build afscell for supported architectures Given that i386 is no longer supported, trying to build the current version of afscell on macOS 11 (Big Sur) results in the following error: error: The i386 architecture is deprecated. You should update your ARCHS build setting to remove the i386 architecture. To fix this problem, build afscell for all architectures listed in ARCHS_STANDARD. For the macosx11.0 sdk: $ xcodebuild -showBuildSettings -scheme afscell -sdk macosx | grep ARCHS ARCHS = arm64 x86_64 ARCHS_STANDARD = arm64 x86_64 ARCHS_STANDARD_32_64_BIT = arm64 x86_64 i386 ARCHS_STANDARD_32_BIT = i386 ARCHS_STANDARD_64_BIT = arm64 x86_64 ARCHS_STANDARD_INCLUDING_64_BIT = arm64 x86_64 VALID_ARCHS = arm64 arm64e i386 x86_64 While here, add arm64 to the list of valid architectures. Reviewed-on: https://gerrit.openafs.org/14745 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit dc6ced5e6d63ad89b1ad6f6b236a28b823abb59d) Change-Id: I483c41a5954caa8ed080134d82f2e08a7c1973a4 Reviewed-on: https://gerrit.openafs.org/15247 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit a0898c2d90ed2928245576505f74e935a1ea2722 Author: Cheyenne Wills Date: Mon Sep 19 16:25:13 2022 -0600 UKERNEL: avoid double include of roken.h Commit 'afs: Replace strcpy &co by safer alternatives' (419f0cd7aa75719) added an include for roken.h into UKERNEL/afsincludes.h. Neither UKERNEL/afsincludes.h or roken.h has a guard against a double include, which can result in a build failure on older kernels (discovered on a 2.6.18 build): In file included from ~/openafs/src/afs/UKERNEL/afsincludes.h:30, from ~/openafs/src/afs/UKERNEL/afs_usrops.h:15, from ~/openafs/src/afs/UKERNEL/afs_usrops.c:24: include/roken.h:89: error: redefinition of typedef 'rk_socket_t' include/roken.h:89: error: previous declaration of 'rk_socket_t' was here In file included from ~/openafs/src/afs/UKERNEL/afsincludes.h:30, from ../afs/afsincludes.h:16, from ../afs/afs_bypasscache.h:68, from ~/openafs/src/afs/UKERNEL/afs_usrops.c:30: Since roken.h is from an external source, we cannot update it to add the necessary check. Update UKERNEL/afsincludes.h to add a check to see if it has already been included. auth/ktc.c has a required include for roken.h, but it also can pull in UKERNEL/afsincludes.h as well. This can result in a double include for roken.h. Update auth/ktc.c to only include roken.h if not building UKERNEL. Reviewed-on: https://gerrit.openafs.org/15130 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit cc0ffc56e85eec4133bcc5e745efa28f5d3c53a7) Change-Id: I4508c2d4bb878dadce649f0da2af16c9efa69b91 Reviewed-on: https://gerrit.openafs.org/15265 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 5993965112da00e29ebdb2be084b50bae5cbb90f Author: Marcio Barbosa Date: Wed Mar 23 17:58:41 2022 -0300 DARWIN: Declare/include functions before using them Every function should be explicitly declared before it can be called. Since -Wimplicit-function-declaration is usually a warning and not an error, calling undeclared functions does not prevent us from building the code. However, apple-clang 12 makes this an error by default, prohibiting the build of the current version on macOS 11 (Big Sur). To fix this problem, declare functions before calling them. Also, include mach/thread_act.h into afs_call.c so the declaration of thread_terminate() can be found on macOS. Last, given that the third argument of PIOCTL() (if UKERNEL is defined) is a pointer, cast it to 'long'. Doing so, we can avoid another inhibited warning. Notice that this PIOCTL definition is scoped to a single file (src/auth/ktc.c). Reviewed-on: https://gerrit.openafs.org/14744 Reviewed-by: Andrew Deason Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit f9c96d0fd609e14fcb8ff7d9269024e026f742cb) Change-Id: I70dadc44d40e1fc877f9e0490e28636907432faa Reviewed-on: https://gerrit.openafs.org/15246 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand Tested-by: Stephan Wiesand commit 34d869996dda2de2449a1623de051b86e262212c Author: Andrew Deason Date: Fri Jan 21 17:54:48 2022 -0600 afs: Organize setpag() declarations better The current declarations for setpag() are a mess (not to be confused with many other setpag functions, like afs_setpag()), accumulated across various commits over time. Shuffle the #ifdef logic around, so this becomes a much more straightforward #ifdef ladder, with one declaration per conditional. And move the LINUX declaration to be next to all of the others (even the LINUX setpag() is declared in osi_groups.c, not osi_misc.c, so it's in the wrong spot anyway). The resulting #ifdef logic should be identical to the original code, but is now easier to follow. For the BSDs, it may look like we have changed the conditional for the case of "XBSD && !DFBSD && !FBSD && !NBSD", but that's a very roundabout way of saying OBSD (OpenBSD). Reviewed-on: https://gerrit.openafs.org/14883 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit 738a6487ad088068d19a18c6330e01a40f2fd278) Change-Id: I9dc933fa96fc6e7839c010c5207e644179343898 Reviewed-on: https://gerrit.openafs.org/15245 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: Andrew Deason Reviewed-by: Stephan Wiesand commit b56d5cdfa8cfff3bd3c166a38204cfa4dceaaf73 Author: Marcio Barbosa Date: Wed Mar 23 17:31:54 2022 -0300 bucoord: Introduce ubik_Call_SingleServer_BUDB_* In an effort to avoid the usage of undeclared functions, add wrappers for ubik_Call_SingleServer() (_BUDB_GetVolumes(), _BUDB_DumpDB()) and adjust its callers accordingly. Also, make sure that ubik_Call_SingleServer() uses the same signature as ubik_Call(). This change helps us to get rid of casting errors. Reviewed-on: https://gerrit.openafs.org/14886 Reviewed-by: Andrew Deason Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 981b3d723ec56dad553be570147d1b2aa632f4e1) Change-Id: I5893a939bc5cd64eec9dbbf1ce8a0dc5032c81f0 Reviewed-on: https://gerrit.openafs.org/15244 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand Tested-by: Stephan Wiesand commit 1e6fd4ceae1f8146a5dfa7c66330289564dbe7be Author: Marcio Barbosa Date: Tue Apr 5 22:39:56 2022 +0000 afs: Ensure dirEntry->name has room for entry name Currently, the afs_dynroot_addDirEnt() function assumes that the caller has allocated the directory to be large enough to hold the necessary entry. In order to make sure that memory isn't being accidentally stomped, use strlcpy to truncate instead of stomping on other memory. That way, if the caller makes a mistake we don't silently corrupt memory. We specifically do not assert that there is no truncation or panic if truncation occurs, since the effect of a truncated entry in the dynamic AFS root volume is limited and does not justify bringing down the entire client. Reviewed-on: https://gerrit.openafs.org/14938 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Marcio Brito Barbosa Reviewed-by: Benjamin Kaduk (cherry picked from commit aa9180652876a3ba9157776b69a6995ac4201d1b) Change-Id: I21a402bb6e20f2546c61bdabde021817dd3827d8 Reviewed-on: https://gerrit.openafs.org/15243 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand Tested-by: Stephan Wiesand commit 79c8c8639952fc3305b50152ba450ed8d858e7be Author: Michael Meffie Date: Wed Sep 1 12:38:14 2021 -0400 fs: Trim trailing lsmount and flushmount path slashes Remove trailing slashes from paths given to `fs lsmount` and `fs flushmount`. This makes for a more pleasant user experience when shell tab completion is used to specify the paths. Thanks to Stephan Wiesand for pointing out this issue. Reviewed-on: https://gerrit.openafs.org/14779 Tested-by: BuildBot Reviewed-by: Stephan Wiesand Reviewed-by: Benjamin Kaduk (cherry picked from commit a7a672cae871aa9cf9cc003a37579cb4df51b3fe) Change-Id: I24a2ae323f64f2d73be8fbc26860fa2864e34bfe Reviewed-on: https://gerrit.openafs.org/15242 Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand Tested-by: Stephan Wiesand commit 91f11551714c6b6f653fd367bc8d184c8aba9e7b Author: Andrew Deason Date: Fri Aug 24 13:03:24 2018 -0500 afs: Detect VIOCPREFETCH special case properly Currently, afs_syscall_pioctl handles the VIOCPREFETCH pioctl as a special case, calling into a different code path to handle backgrounding the prefetch operation. However, we detect that we're handling a VIOCPREFETCH operation just by looking at the lower 8 bits of the given opcode. This means that any pioctl that ends in 0x0F will trigger this codepath, such as if we add a 'C' or 'O' pioctl that uses code 0x0F. We only want to catch VIOCPREFETCH requests for this code path, so fix the check to also check if we're processing a 'V' pioctl. Reviewed-on: https://gerrit.openafs.org/13301 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 252b3bcc75ea141ff93a7b3147865f4b952fcaca) Change-Id: I12d0616059dd8115b109b1ffa4cafe6ddc4b1662 Reviewed-on: https://gerrit.openafs.org/15241 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Tested-by: Andrew Deason Reviewed-by: Stephan Wiesand commit 581450c74c57680eeb89bf937b4d42936df6196b Author: Marcio Barbosa Date: Wed Apr 6 20:59:56 2022 +0000 afs: Replace strcpy &co by safer alternatives In addition to being unsafe, these functions (strcpy, strncpy, strcat, and sprintf) are deprecated on macOS. Replace these functions by safer alternatives (strlcpy, strlcat, snprintf, and afs_strdup). Notice that, in order to use afs_strdup(), this commit adds the afs_util library to the AFSPAGOBJS list. Given that afs_strcasecmp() is also implemented in afs_util.c, src/crypto/hcrypto/kernel/strcasecmp.c can be removed from the tree. No functional change should be incurred by this commit. This commit is a continuation of a patch initially developed by cwills@sinenomine.net. Reviewed-on: https://gerrit.openafs.org/14743 Reviewed-by: Andrew Deason Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 419f0cd7aa75719dcf4df97e603ad4f0d936ddd9) [cwills@sinenomine.net] Part of the (419f0cd7aa) changes to afs_callback.c were pulled in to a 1.8.x specific commit: "afs: Avoid unbounded string copy in SRXAFSCB_GetLock()" (79a04c344) In order to resync the code, the include roken.h in afs_callback.c introduced in that commit needed to be removed. Change-Id: Ica0e9bdc82de2b1e89e6d4b513e775b2809fbc34 Reviewed-on: https://gerrit.openafs.org/15240 Reviewed-by: Michael Meffie Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand Tested-by: Stephan Wiesand commit c7048f9a5c29df5816b6bcebaa42965bccb12557 Author: Mark Vitale Date: Thu Jun 14 14:38:54 2018 -0400 afs: remove dead code afs_CheckLocks has been dead code since openafs-ibm-1_0. No functional change incurred. Reviewed-on: https://gerrit.openafs.org/13210 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 0839a3326858f7d7a0042614710dcf7316bb6018) Change-Id: I1c564255990803dac7abe1789f2941bf4fa30b58 Reviewed-on: https://gerrit.openafs.org/15239 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit fc5be911a0ef216b9af79a0ec6bc32512085d398 Author: Marcio Barbosa Date: Wed Mar 23 16:04:46 2022 -0300 UKERNEL: Remove flock -> usr_flock redirection In order to replace 'struck flock' with 'struct usr_flock' and 'flock()' with 'usr_flock()', the current version of src/afs/UKERNEL/sysincludes.h defines flock to usr_flock. This can cause problems when trying to use libroken in UKERNEL code, because roken.h redefines flock. To avoid conflicts with libroken (included in a future commit), add a new UKERNEL specific AFS_FLOCK -> usr_flock redirection. Doing so, the flock -> usr_flock redirection can be removed. While here, also remove 'usr_flock()' as it shouldn't be called and is not defined in any header file. Reviewed-on: https://gerrit.openafs.org/14913 Reviewed-by: Andrew Deason Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 51c0387aaa5ec507c6e29063ef56d98e2931402d) Change-Id: I3c2d9de056bae3f2fed68f1ec183540b63584a43 Reviewed-on: https://gerrit.openafs.org/15238 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 276632ea7334fd27972585823f358e92b448da59 Author: Andrew Deason Date: Thu Jan 27 14:49:15 2022 -0600 UKERNEL: Remove socket -> usr_socket redirection Currently, src/afs/UKERNEL/sysincludes.h #defines 'socket' to 'usr_socket', in order for 'struct socket' declarations to use struct usr_socket. Redefining a simple word/function like 'socket' can easily cause issues, and currently makes it difficult to introduce libroken callers in UKERNEL code. There are already several instances of '#undef socket' in the tree for UKERNEL, suggesting that this wasn't a good idea to start with. Fortunately, this redefinition of 'socket' in UKERNEL seems unnecessary, since the only place 'struct usr_socket' is actually deferenced is inside src/rx/UKERNEL/rx_knet.c. So we can treat 'struct usr_socket' as a struct definition that's just internal to rx_knet.c, and no other code even needs to know about the struct, or think that it's equivalent to 'struct socket'. Most code in rx_knet.c already explicitly casts between 'struct socket' and 'struct usr_socket'. The only exception is rxi_Recvmsg starting in commits near 27c42be1 (ukernel-rx-knet-deref-20060126), but this is easily fixed by adding an additional explicit cast. Reviewed-on: https://gerrit.openafs.org/14887 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 17b16cb3989d1f41e314795515daf6c9b41cf1de) Change-Id: I35c7b7fc61c1c741be928fa7beb889d8848f0b81 Reviewed-on: https://gerrit.openafs.org/15237 Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Stephan Wiesand commit f2f0be5e04f2a700b721f647a87cbffe2ccd606a Author: Marcio Barbosa Date: Wed Mar 23 15:10:15 2022 -0300 afs: Save size of sysname_info->name In preparation for a future commit, save the size of sysname_info->name by adding a new field (name_size) into the sysname_info struct. Also, remove the sysname_info->allocked field, since now we can find out if memory has been allocated by checking if sysname_info->name_size is different than zero. No functional change should be incurred by this commit. Reviewed-on: https://gerrit.openafs.org/14912 Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Benjamin Kaduk (cherry picked from commit c40c0bd00b7e49e67377e13f5b902c13a0e4478c) Change-Id: I5a7d0d733dfc48d4d4eb5d00ef959ad980722e17 Reviewed-on: https://gerrit.openafs.org/15236 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit 6ba75f842f307e94db86b95c9da98e9e40d11c35 Author: Marcio Barbosa Date: Thu Jul 1 10:47:50 2021 -0300 fs: add option to evaluate symlink or mtpt Currently, several fs subcommands for Windows offer an option (-literal) to evaluate symlink / mount point rather than the object it refers to. Provide the same option on Unix for fs_getfid. Reviewed-on: https://gerrit.openafs.org/14542 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: Benjamin Kaduk (cherry picked from commit 83d947c150322c3c7c65130ecf08719e466cae04) Change-Id: Ife60e046c149f3586dbdad0e9b3fd6059967ece1 Reviewed-on: https://gerrit.openafs.org/15235 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit f1fd9c9cae8438635ea6e64fff05507921046ef3 Author: Marcio Barbosa Date: Tue Aug 17 19:52:11 2021 +0000 afs: refactor PNewStatMount and PFlushMount Both functions use the same logic to find a name in a given directory. To avoid repetition, move this logic to a separate function called afs_LookupName(). No functional change is incurred by this commit. Reviewed-on: https://gerrit.openafs.org/14541 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit 981bc005f8161ca9ee52ea281c7d73e0e4e2461a) Change-Id: I11f03146da86c91f83ad682df7ad1943cb4ab68f Reviewed-on: https://gerrit.openafs.org/15234 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Harish Sharma Reviewed-by: Stephan Wiesand commit b17625959386459059f6f43875d8817383554481 Author: Cheyenne Wills Date: Thu Dec 1 14:18:36 2022 -0700 cf: Handle autoconf linux checks with -Werror When the linux kernel has been configured with CONFIG_WERROR=y, several autoconf configure checks used to detect linux features fail due to the compiler performing additional coding checks (e.g. unused variables, uninitialized variables, etc.). Typically these additional coding checks produce compiler warnings, but with CONFIG_WERROR=y these warnings are reported as compiler errors, resulting in a misconfigured build environment. When testing for kernel features, turn off -Werror in the autoconf functions AC_CHECK_LINUX_BUILD and AC_CHECK_LINUX_FUNC by explicitly setting the compiler '-Wno-error' flag. In addition, fix the commented description for AC_CHECK_LINUX_BUILD to match the actual parameters Reviewed-on: https://gerrit.openafs.org/15191 Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Tested-by: BuildBot (cherry picked from commit e2ad1ca5f7355062e808f1717e7410b7ae893371) Change-Id: I2c8ba4c421ed751aa6ff2899ea173c1e84053322 Reviewed-on: https://gerrit.openafs.org/15231 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 57df4dff496ca9bea04510759b8fdd9cd2cc0009 Author: Cheyenne Wills Date: Thu Dec 1 12:55:26 2022 -0700 cf: Detect how to pass CFLAGS to linux kbuild The autoconf test LINUX_KBUILD_USES_EXTRA_CFLAGS fails on modern kernels when detecting how to pass CFLAGS to the compiler when building a Linux kernel module. The result of this test is used by configure when testing for Linux kernel features. In addition the EXTRA_CFLAGS method of passing compiler parameters has been deprecated since Linux 2.6.24 commit: "kbuild: introduce ccflags-y, asflags-y and ldflags-y" (f77bf01425b) The currently preferred method is to use the make variable 'ccflags-y' to set compiler flags. Replace the autoconf function LINUX_KBUILD_USES_EXTRA_CFLAGS with a new test, LINUX_KBUILD_FIND_CFLAGS_METHOD, that checks the various ways to pass compiler flags when building the kernel module. Set the build variable "LINUX_KBUILD_CFLAGS_VAR" with the determined method for setting kbuild compiler flags. Update the AC_TRY_KBUILD26 autoconf function and the make_kbuild_makefile.pl script to use the determined method for setting the compiler flags for the kbuild process. Background: The autoconf test, LINUX_KBUILD_USES_EXTRA_CFLAGS, is used to determine when to use either CFLAGS for EXTRA_CFLAGS when performing other autoconf tests for Linux kernel features. The test was added with the openafs commit: "linux-2624-20071123" (af7cf697ef8) LINUX_KBUILD_USES_EXTRA_CFLAGS relied on the Linux 2.6.24 commit: "kbuild: check for wrong use of CFLAGS" (0c53c8e6eb4) which caused a build failure if CFLAGS where used instead of EXTRA_CFLAGS. Later with the Linux 4.20 commit: "kbuild: remove old check for CFLAGS use" (0d91bf584fe) which removed the build failure when CFLAGS were set and this resulted in LINUX_KBUILD_USES_EXTRA_CFLAGS failing to properly determining how to set compiler flags in the kbuild process. As mentioned above, the EXTRA_CFLAGS method itself has been deprecated in Linux 2.6.24, but support for using it has still present in the kbuild processes. Reviewed-on: https://gerrit.openafs.org/15196 Tested-by: BuildBot Reviewed-by: Cheyenne Wills Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit f81b01de1a51f02798ac764fb2f6948b592639da) Change-Id: Ib1e07bf6b8734a427a2682ca694fbe2e083f1ecd Reviewed-on: https://gerrit.openafs.org/15230 Tested-by: BuildBot Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand commit 2cf76b31ce4c912b1151c141818f6e8c5cddcab2 Author: Andrew Deason Date: Fri Jun 28 14:14:48 2019 -0500 LINUX: Run the 'sparse' checker if available The Linux kernel module buildsystem supports running an external tool (by default, the 'sparse' tool) during the build to run additional static checks on the source code to flag various warnings. Tell the kernel build to run such a tool, if 'sparse' is installed. This causes various new warnings in the build, such as: CHECK /.../src/libafs/MODLOAD-4.9.0-8-amd64-MP/afs_tokens.c /.../src/libafs/MODLOAD-4.9.0-8-amd64-MP/afs_tokens.c:73:1: warning: symbol 'afs_FreeOneToken' was not declared. Should it be static? /.../src/libafs/MODLOAD-4.9.0-8-amd64-MP/afs_tokens.c:160:1: warning: symbol 'afs_IsTokenExpired' was not declared. Should it be static? /.../src/libafs/MODLOAD-4.9.0-8-amd64-MP/afs_tokens.c:187:1: warning: symbol 'afs_IsTokenUsable' was not declared. Should it be static? None cause the build to fail currently, but are just printed for potential further investigation. To control detecting 'sparse', add the --with-sparse configure option and SPARSE configure variable. Default to checking if sparse is available, and enabling it if so. Further information on using sparse in the Linux kernel is available in Documentation/sparse.txt in the Linux tree. Using 'sparse' during the build was suggested by yadayada@in.ibm.com. Reviewed-on: https://gerrit.openafs.org/13665 Reviewed-by: Cheyenne Wills Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 1210a8d6d96db2d84595d35ef81ec5d176de05e8) Change-Id: I5d52b1eed48564956a687fba0419185b01621b13 Reviewed-on: https://gerrit.openafs.org/15229 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Michael Meffie Reviewed-by: Stephan Wiesand