Skip to content

Fix shmem_rename2 directory offset calculation

[email protected] linux-fsdevel 2 versions – Applied

Status from this message: Applied to the vfs.misc branch of the vfs/vfs.git tree.

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest3 patches 2 repliesApplied
  2. v12 patches 2 repliesSuperseded

Changes in v2 from the cover letter

- Patches reorganized for easier review and backport
- Passes git regression and fstests (with scratch device)
- Dropped the API clean-up patch for now

Patches in v2 Applied

#Subject and filesSizeRepliesApplied
1/3libfs: Fix simple_offset_rename_exchange()fs/libfs.c+19 -60 replies
2/3libfs: Add simple_offset_rename() APIfs/libfs.c include/linux/fs.h mm/shmem.c+24 -20 replies
3/3shmem: Fix shmem_rename2()fs/libfs.c+9 -00 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH v2 0/3] Fix shmem_rename2 directory offset calculation

From: Chuck Lever <[email protected]>

The existing code in shmem_rename2() allocates a fresh directory offset value when renaming over an existing destination entry. User space does not expect this behavior. In particular, applications that rename while walking a directory can loop indefinitely because they never reach the end of the directory.

The only test that is problematic at the moment is generic/449, which live-locks (interruptibly). I don't have a baseline yet, so I can't say whether the fix introduces this behavior or pre-dates the shmem conversion to simple_offset.

--
Changes since v1:
- Patches reorganized for easier review and backport
- Passes git regression and fstests (with scratch device)
- Dropped the API clean-up patch for now

Chuck Lever (3):
libfs: Fix simple_offset_rename_exchange()
libfs: Add simple_offset_rename() API
shmem: Fix shmem_rename2()

 fs/libfs.c         | 55 +++++++++++++++++++++++++++++++++++++++++-----
 include/linux/fs.h |  2 ++
 mm/shmem.c         |  3 +--
 3 files changed, 52 insertions(+), 8 deletions(-)

base-commit: fec50db7033ea478773b159e0e2efb135270e3b7

Signature · 1 line
2.44.0