On leaf directories, xfs_dir2_leaf_getdents() always returns
XFS_DIR2_MAX_DATAPTR (0xffffffff) as the last offset, and this
overflows the signed 32 bit dp->d_off in newer glibc's with getdents64().
Changing XFS_DIR2_MAX_DATAPTR to 0x7fffffff (unsetting the sign bit)
solves this, if not elegantly. It also reduces the maximum
directory size from ~4G to ~2G.
There may be a better way to fix this in glibc, rather than in XFS,
but this should suffice for now.
Date: Mon Oct 30 17:30:52 PST 2000
Workarea: eric1.austin.sgi.com:/home/eric/xfs/workarea-clean
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.4.x-xfs
Modid: 2.4.x-xfs:slinx:77184a
linux/fs/xfs/xfs_dir2.c - 1.26
- Removed unused reclen variable & assignment
Subject: TAKE -
Date: Wed Nov 1 16:38:12 PST 2000
Workarea: eric1.austin.sgi.com:/home/eric/xfs/workarea-clean
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.4.x-xfs
Modid: 2.4.x-xfs:slinx:77348a
linux/fs/xfs/xfs_dir2_leaf.h - 1.7
- Change XFS_DIR2_MAX_DATAPTR to avoid glibc overflow in getdents64
|