On Wed 20-06-18 16:15:03, Ross Zwisler wrote: > diff --git a/fs/ext4/truncate.h b/fs/ext4/truncate.h > index 0cb13badf473..a3b78241e9f6 100644 > --- a/fs/ext4/truncate.h > +++ b/fs/ext4/truncate.h > @@ -12,6 +12,7 @@ > static inline void ext4_truncate_failed_write(struct inode *inode) > { > down_write(&EXT4_I(inode)->i_mmap_sem); > + ext4_break_layouts(inode); > truncate_inode_pages(inode->i_mapping, inode->i_size); > ext4_truncate(inode); > up_write(&EXT4_I(inode)->i_mmap_sem); One comment here: I don't think ext4_break_layouts() is necessary here. ext4_truncate_failed_write() exists to truncate blocks beyond EOF. As such these blocks could never be even mmaped, let alone pinned by GUP. Maybe just add a comment that blocks we are truncating here were never visible to userspace and so we don't need ext4_break_layouts() protection. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR