Re: [PATCH V2] libxfs: use FALLOC_FL_ZERO_RANGE in libxfs_device_zero

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

 



On 2/13/20 7:34 PM, Dave Chinner wrote:
> On Thu, Feb 13, 2020 at 07:05:50PM -0600, Eric Sandeen wrote:

...

>>  /*
>>   * Check whether we have to define FS_IOC_FS[GS]ETXATTR ourselves. These
>>   * are a copy of the definitions moved to linux/uapi/fs.h in the 4.5 kernel,
>> diff --git a/libxfs/rdwr.c b/libxfs/rdwr.c
>> index 0d9d7202..2f6a3eb3 100644
>> --- a/libxfs/rdwr.c
>> +++ b/libxfs/rdwr.c
>> @@ -60,9 +60,19 @@ int
>>  libxfs_device_zero(struct xfs_buftarg *btp, xfs_daddr_t start, uint len)
>>  {
>>  	xfs_off_t	start_offset, end_offset, offset;
>> -	ssize_t		zsize, bytes;
>> +	ssize_t		zsize, bytes, len_bytes;
> 
> len_bytes should be size_t, right?

They probably all should be, TBH...
 
>>  	char		*z;
>> -	int		fd;
>> +	int		error, fd;
>> +
>> +	fd = libxfs_device_to_fd(btp->dev);
>> +	start_offset = LIBXFS_BBTOOFF64(start);
>> +	end_offset = LIBXFS_BBTOOFF64(start + len) - start_offset;
>> +
>> +	/* try to use special zeroing methods, fall back to writes if needed */
>> +	len_bytes = LIBXFS_BBTOOFF64(len);
>> +	error = platform_zero_range(fd, start_offset, len_bytes);
> 
> This is a bit ... convoluted, and doesn't end_offset = len_bytes?
> i.e.
> 
> start_offset = start << BBSHIFT
> len_bytes = len << BBSHIFT
> end_offset = (start + len) << BBSHIFT - start_offset
> 	   = (start << BBSHIFT) + (len << BBSHIFT) - start_offset
> 	   = start_offset + len_bytes - start_offset
> 	   = len_bytes

oh, yikes.  Good catch.  Before, it was used as

        end_offset = LIBXFS_BBTOOFF64(start + len) - start_offset;
        for (offset = 0; offset < end_offset; ) {
                bytes = min((ssize_t)(end_offset - offset), zsize);
                if ((bytes = write(fd, z, bytes)) < 0) {

"end_offset" was not the ending offset of the whole range... that's what I get
for inferring too much from a variable name w/o looking at what it actually /does/

I'll sort that out, thanks.

-Eric

> Cheers,
> 
> Dave.
> 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux