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

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

 



On Sun, Dec 15 2024, David Laight wrote:

> From: cel@xxxxxxxxxx
>> Sent: 15 December 2024 18:58
>> 
>> 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+
>> Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>
>> Reviewed-by: Yang Erkun <yangerkun@xxxxxxxxxx>
>> 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 748ac5923154..f6d04c69f195 100644
>> --- a/fs/libfs.c
>> +++ b/fs/libfs.c
>> @@ -292,7 +292,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;
>
> You've just added an extra comparison to a hot path.
> Doing:
> 	if (ret < 0)
> 		return ret == -EBUSY ? -ENOSPC : ret;
> would be better.

This also has two comparisons: one for ret < 0 and another for ret ==
-EBUSY. So I don't see a difference. I was curious to see if compilers
can somehow optimize one or the other, so I ran the two on godbolt and I
see no real difference between the two: https://godbolt.org/z/9Gav6b6Mf

-- 
Regards,
Pratyush Yadav




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux