summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
authorsimonb <simonb@NetBSD.org>2021-09-06 08:37:43 +0000
committersimonb <simonb@NetBSD.org>2021-09-06 08:37:43 +0000
commit5ebe29bbf06f0ee121fc42e08733a034ee836d84 (patch)
tree2c181e84e425e387eb1556f3bc6c764ccd53187c /external
parent671612ef35e522ddae7e2784084275cae6e47ee5 (diff)
Clamp zfs nlinks at UINT32_MAX (nlink_t max) instead of (much) smaller
16-bit LINK_MAX until we bump LINK_MAX. Fixes fts(3) problems with "rm -rf" on zfs directories with > 32766 subdirectories. Thanks mlelstv@ and mrg@ for helping debug this.
Diffstat (limited to 'external')
-rw-r--r--external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c b/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
index 7301a58c7bb..3f1c4edc523 100644
--- a/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
+++ b/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
@@ -3116,7 +3116,8 @@ zfs_getattr(vnode_t *vp, vattr_t *vap, int flags, cred_t *cr,
links = zp->z_links + 1;
else
links = zp->z_links;
- vap->va_nlink = MIN(links, LINK_MAX); /* nlink_t limit! */
+ /* XXX NetBSD: use LINK_MAX when that value matches 32-bit nlink_t */
+ vap->va_nlink = MIN(links, UINT32_MAX); /* nlink_t limit! */
vap->va_size = zp->z_size;
#ifdef illumos
vap->va_rdev = vp->v_rdev;