[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d153bb2e-5f95-47d0-43db-b95c577e2b91@linaro.org>
Date: Tue, 15 Mar 2022 10:50:49 -0700
From: Tadeusz Struk <tadeusz.struk@...aro.org>
To: Ritesh Harjani <riteshh@...ux.ibm.com>
Cc: Theodore Ts'o <tytso@....edu>,
Andreas Dilger <adilger.kernel@...ger.ca>,
linux-ext4@...r.kernel.org
Subject: Re: BUG in ext4_ind_remove_space
On 3/6/22 21:45, Ritesh Harjani wrote:
> Just FYI - The change which we discussed to fix the max_block to max_end_block, is not correct.
> Since it will still leave 1 block at the end after punch operation, if the file has s_bitmap_maxbytes size.
> This is due to the fact that, "end" is expected to be 1 block after the end of last block.
>
> Will try look into it to see how can we fix this.
>
> 1210 /**
> 1211 * ext4_ind_remove_space - remove space from the range
> 1212 * @handle: JBD handle for this transaction
> 1213 * @inode: inode we are dealing with
> 1214 * @start: First block to remove
> 1215 * @end: One block after the last block to remove (exclusive)
So in that case, in ext4_punch_hole(), what should be done is:
if offset + length > sbi->s_bitmap_maxbytes - inode->i_sb->s_blocksize
it either needs to update the length to:
length = sbi->s_bitmap_maxbytes - inode->i_sb->s_blocksize - offset;
or -ENOSPC should be returned, which would be more consistent with the `man 2
fallocate`:
"ERRORS:
...
ENOSPC There is not enough space left on the device containing the file
referred to by fd."
Please let me know if my reckoning is correct, and if so which option you
prefer and I will follow with a patch.
--
Thanks,
Tadeusz
Powered by blists - more mailing lists