Re: [PATCH] xfs: flush the range before zero partial block range on truncate down

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

 



On Tue, Oct 31, 2017 at 06:09:58PM +0800, Eryu Guan wrote:
> On Fri, Oct 27, 2017 at 11:05:29PM -0700, Christoph Hellwig wrote:
> > On Fri, Oct 27, 2017 at 08:53:28PM +0800, Eryu Guan wrote:
> > > But it's possible that a buffer write overwrites the unwritten
> > > extent, which won't be converted to a normal extent until I/O
> > > completion, and iomap_truncate_page() skips zeroing wrongly because
> > > of the not-converted unwritten extent. This would cause a subsequent
> > > mmap read sees non-zeros beyond EOF.
> > 
> > I suspect the right fix is to look at the in-core state im the iomap
> > truncate helpers instead of doing a duplicate flush.
> 
> I may (and very likely) miss something, but my understanding is that
> iomap_truncate_page() already looks at the in-core extent state provided
> by xfs_file_iomap_begin()
> 
> xfs_setattr_size()
>  iomap_truncate_page()
>   iomap_zero_range()
>    iomap_apply()
>     xfs_file_iomap_begin()	# finds extent according to the range
>     iomap_zero_range_actor() 	# sees iomap->type == IOMAP_UNWRITTEN
> 
> And this in-core extent state won't be converted to XFS_EXT_NORM until
> writeback & I/O completion, so I think a flush is required.

If we get to iomap_zero_range_actor & type == UNWRITTEN, can we ask the
pagecache if there's a page backing the (unwritten) range and if so zero
the appropriate parts of that page?

--D

> Thanks,
> Eryu
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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