Opened 6 years ago
Closed 6 years ago
#14161 closed enhancement (fixed)
nfs-utils-2.5.2
| Reported by: | Bruce Dubbs | Owned by: | Douglas R. Reno |
|---|---|---|---|
| Priority: | normal | Milestone: | 10.1 |
| Component: | BOOK | Version: | SVN |
| Severity: | medium | Keywords: | |
| Cc: |
Description
New point version.
Change History (3)
comment:1 by , 6 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:2 by , 6 years ago
Note:
See TracTickets
for help on using tickets.

Release: 2.5.2 mount.nfs: Fail when v3 related options are passed for v4 mounts Added the missing v3-only mount option to list that should cause v4 mount to fail. clddb-tool was recently renamed to nfsdclddb. Unfortunately the nfsdcld man page wasn't told. gssd: Cleaned up the level 2 debugging statements mountd: Ignore transient and non-fatal filesystem errors in nfsd_export If the mount point check in nfsd_export fails due to a transient error, then ignore it to avoid spurious NFSERR_STALE errors being returned by knfsd. nfsidmap:umich_ldap return success only if attributes are found in ldap resp. Return ENOENT if the UID/GID attributes are not found in ldap response nfsiostat/mountstats: Drop autofs entries before calling compare_iostats() nfsiostat/mountstats can fail with below KeyError when old stat and new stat data go out of sync. $ mountstats iostat 1 3 Traceback (most recent call last): File "/usr/sbin/mountstats", line 1092, in <module> res = main() File "/usr/sbin/mountstats", line 1081, in main return args.func(args) File "/usr/sbin/mountstats", line 965, in iostat_command print_iostat_summary(old_mountstats, mountstats, devices, sample_time) File "/usr/sbin/mountstats", line 920, in print_iostat_summary diff_stats = stats.compare_iostats(old_stats) File "/usr/sbin/mountstats", line 528, in compare_iostats if old_stats.__nfs_data['age'] > self.__nfs_data['age']: KeyError: 'age' Frequent mount and umount can cause autofs entries to be processed in compare_iostats. We need to filter the devices list and drop autofs entries to fix the issue. This way we pass only nfs mounts and not autofs entries. rpc.idmapd: Do not free config variables Commit 93e8f092e added a conf_cleanup() call to clean up memory after the config file was parsed. It turns out that memory still needed and it is not very much so the call is removed. rpc.gssd: munmap_chunk(): invalid pointer Removed an errant call to gss_release_oid() to try and deal with memory leaks Convert remaining python scripts to python3 nfs-utils contains 4 python scripts, two request /usr/bin/python3 in their shebang line, two request /usr/bin/python Those latter two run perfectly well with python3 and as python2 is on the way out, change them so they requrest /usr/bin/python3. nfs-iostat: divide by zero with fresh mount When an export is freshly mounted, /proc/self/mountstats displays age = 0. This causes nfs-iostat to divide by zero throwing an error. When we have age = 0, other stats are greater than 0, so we'll set age = 1 and print the relevant stats. This will prevent a backtrace like this from occurring if nfsiostat is run. nfsiostat -s 1 Traceback (most recent call last): File "/usr/sbin/nfsiostat", line 662, in <module> iostat_command(prog) File "/usr/sbin/nfsiostat", line 644, in iostat_command print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) File "/usr/sbin/nfsiostat", line 490, in print_iostat_summary devicelist.sort(key=lambda x: stats[x].ops(time), reverse=True) File "/usr/sbin/nfsiostat", line 490, in <lambda> devicelist.sort(key=lambda x: stats[x].ops(time), reverse=True) File "/usr/sbin/nfsiostat", line 383, in ops return (sends / sample_time) ZeroDivisionError: float division by zero rpc.idmapd: rework the verbosity of idmapd -v means only error -vv errors and informational messages -vvv all debugging messages will be displayed rpc.idmapd: Turn down the verbosity in flush_inotify() Commit 27a8e146 introduce a debugging message that was not cover by a check if verbose is set, which cause a large number of message to be logged on every kerberos mount nfsidmap: Allow overriding location of method libraries idmapd: Fix client mode support The inotify event was never rearmed, so we wouldn't get any notice after the first event. Even if it had been re-added, we never read the pending events so it would continously fire. Fix this by moving to persistent events and reading any pending inotify events. Effect was we'd leak any clients that existed after the first event. Switch from dnotify to inotify on the client dir if the idmap file isn't available yet. idmapd: Add graceful exit and resource cleanup exportfs: Fix a few valgrind warnings svcgssd: Wait for nullrpc channel if not available svcgssd: Cleanup global resources on exit nfsidmap: Add support to cleanup resources on exit svcgssd: Convert to using libevent nfsdcld: Don't copy more data than exists in column Found with valgrind. nfsdcld: Add graceful exit handling and resource cleanup xlog: Reorganize xlog_backend() to work around -Wmaybe-uninitialized xlog.c: In function 'xlog_backend': xlog.c:202:3: warning: 'args2' may be used uninitialized in this function [-Wmaybe-uninitialized] 202 | vfprintf(stderr, fmt, args2); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ gssd: srchost should never be * Fix silly mistake on my part due to a rebase error. gssd: Fix handling of failed allocations Add error handling to libevent allocations. gssd: explain the size need for the ccache buf nfsdcld: Fix a few Coverity Scan CHECKED_RETURN errors. nfsdcld: Fix a few Coverity Scan CLANG_WARNING errors nfsdcld: Fix a few Coverity Scan STRING_NULL errors nfsdcld: Fix a few Coverity Scan TOCTOU errors Calling stat() on recdirname so that we can see if it's a directory is unnecessary anyways, since opendir() will report an error if it's not. nfsdcld: Fix a few Coverity Scan RESOURCE_LEAK errors nfsiostat/mountstats: handle KeyError in compare_iostats() This will prevent a backtrace like this from occurring if nfsiostat is run with <interval> <count>, eg: nfsiostat 1 3 This issue can occur if old_stats.__rpc_data['ops'] keys are not up to date with result.__rpc_data['ops']. I belive this issue can also affect mountstats due to similar code, hence fix it too. nfsiostat:217:compare_iostats:KeyError: 'NULL' Traceback (most recent call last): File "/usr/sbin/nfsiostat", line 649, in <module> iostat_command(prog) File "/usr/sbin/nfsiostat", line 617, in iostat_command print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) File "/usr/sbin/nfsiostat", line 468, in print_iostat_summary diff_stats[device] = stats[device].compare_iostats(old_stats) File "/usr/sbin/nfsiostat", line 217, in compare_iostats difference, self.__rpc_data[op], old_stats.__rpc_data[op])) KeyError: 'NULL' nfs-utils: systemd: nfs-server.service: Cleanup extra whitespaces Although whitespaces immediately before or after the "=" are ignored, removing the extra whitespaces in some of the key=value assignments makes the style more consistent. At least since systemd v242-rc1[1] this has been clarified that whitespaces immediately before and after the "=" are allowed. [1] https://github.com/systemd/systemd/commit/170342c90be07f418ab786718d95ef76289126a0 gssd: Reworked a couple debugging printfs Added thread_ids to the upcall debugging and turned off a fairly useless printf Fix various clang warnings. gssd: We never use the nocache param of gssd_check_if_cc_exists() gssd: Lookup local hostname when srchost is '*' Currently when we receive a '*' srchost, we scan our keytab for a matching host but of course none match. We then fall back to scanning for any service/realm match and eventually find our hostname. Let's lookup our hostname instead and quickly find our specific match. gssd: Add a few debug statements to help track client_info lifetimes. gssd: Fix locking for machine principal list Add missing locking for some scans of the global list. There was also no prevention of ple->ccname being changed concurrently so use the same lock to protect that. Reference counting was also added to ensure that the ple is not freed out from under us in the few places we now drop the lock while doing work. gssd: gssd_k5_err_msg() returns a strdup'd msg. Use free() to release. gssd: Cleanup on exit to support valgrind. Update to libevent 2.x apis gssd: Refcount struct clnt_info to protect multithread usage Struct clnt_info is shared with the various upcall threads so we need to ensure that it stays around even if the client dir gets removed.