Re: [RFC PATCH v2 1/5] libfs: Return ENOSPC when the directory offset range is exhausted

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



LGTM

Reviewed-by: Yang Erkun <yangerkun@xxxxxxxxxx>

在 2024/11/26 23:54, cel@xxxxxxxxxx 写道:
From: Chuck Lever <chuck.lever@xxxxxxxxxx>

Testing shows that the EBUSY error return from mtree_alloc_cyclic()
leaks into user space. The ERRORS section of "man creat(2)" says:

	EBUSY	O_EXCL was specified in flags and pathname refers
		to a block device that is in use by the system
		(e.g., it is mounted).

ENOSPC is closer to what applications expect in this situation.

Note that the normal range of simple directory offset values is
2..2^63, so hitting this error is going to be rare to impossible.

Fixes: 6faddda69f62 ("libfs: Add directory operations for stable offsets")
Cc: <stable@xxxxxxxxxxxxxxx> # v6.9+
Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
---
  fs/libfs.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/libfs.c b/fs/libfs.c
index 46966fd8bcf9..bf67954b525b 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -288,7 +288,9 @@ int simple_offset_add(struct offset_ctx *octx, struct dentry *dentry)
ret = mtree_alloc_cyclic(&octx->mt, &offset, dentry, DIR_OFFSET_MIN,
  				 LONG_MAX, &octx->next_offset, GFP_KERNEL);
-	if (ret < 0)
+	if (unlikely(ret == -EBUSY))
+		return -ENOSPC;
+	if (unlikely(ret < 0))
  		return ret;
offset_set(dentry, offset);





[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux