On Tue 17-09-19 11:31:40, Theodore Y. Ts'o wrote: > On Tue, Sep 17, 2019 at 04:48:14PM +0800, yangerkun wrote: > > No need to wait when offset equals to 0. And it will trigger a bug since > > the latter __ext4_journalled_invalidatepage can free the buffers but leave > > page still dirty. > > That's only true if the block size == the page size, no? If the > offset is zero and the block size is 1k, we still need to wait. > Shouldn't the better fix be: > > > - if (offset > PAGE_SIZE - i_blocksize(inode)) > > + if (offset >= PAGE_SIZE - i_blocksize(inode)) No, what yangerkun wrote is correct. We don't have to wait for commit when offset == 0 - truncate_inode_pages() should just happily process such page. Also '>' in the above condition is correct. offset == PAGE_SIZE - i_blocksize(inode) means one full block is getting truncated from the page and we need to wait in that case to avoid jbd2_journal_invalidatepage() failing with EBUSY when called from truncate_inode_pages(). Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR