On 5.12.19 г. 17:56 ч., Goldwyn Rodrigues wrote: > From: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> > > Since we now perform direct reads using i_rwsem, we can remove this > inode flag used to co-ordinate unlocked reads. > > Signed-off-by: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> Truncate call chain is do_truncate <-- calls inode_lock notify_change ->setattr/btrfs_setattr btrfs_setsize So : Reviewed-by: Nikolay Borisov <nborisov@xxxxxxxx> > --- > fs/btrfs/btrfs_inode.h | 18 ------------------ > fs/btrfs/inode.c | 5 ----- > 2 files changed, 23 deletions(-) > > diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h > index f853835c409c..31c327666a61 100644 > --- a/fs/btrfs/btrfs_inode.h > +++ b/fs/btrfs/btrfs_inode.h > @@ -27,7 +27,6 @@ enum { > BTRFS_INODE_NEEDS_FULL_SYNC, > BTRFS_INODE_COPY_EVERYTHING, > BTRFS_INODE_IN_DELALLOC_LIST, > - BTRFS_INODE_READDIO_NEED_LOCK, > BTRFS_INODE_HAS_PROPS, > BTRFS_INODE_SNAPSHOT_FLUSH, > }; > @@ -320,23 +319,6 @@ struct btrfs_dio_private { > blk_status_t); > }; > > -/* > - * Disable DIO read nolock optimization, so new dio readers will be forced > - * to grab i_mutex. It is used to avoid the endless truncate due to > - * nonlocked dio read. > - */ > -static inline void btrfs_inode_block_unlocked_dio(struct btrfs_inode *inode) > -{ > - set_bit(BTRFS_INODE_READDIO_NEED_LOCK, &inode->runtime_flags); > - smp_mb(); > -} > - > -static inline void btrfs_inode_resume_unlocked_dio(struct btrfs_inode *inode) > -{ > - smp_mb__before_atomic(); > - clear_bit(BTRFS_INODE_READDIO_NEED_LOCK, &inode->runtime_flags); > -} > - > /* Array of bytes with variable length, hexadecimal format 0x1234 */ > #define CSUM_FMT "0x%*phN" > #define CSUM_FMT_VALUE(size, bytes) size, bytes > diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c > index fedbbcf108cf..71ba4b5503f0 100644 > --- a/fs/btrfs/inode.c > +++ b/fs/btrfs/inode.c > @@ -5238,11 +5238,6 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr) > > truncate_setsize(inode, newsize); > > - /* Disable nonlocked read DIO to avoid the endless truncate */ > - btrfs_inode_block_unlocked_dio(BTRFS_I(inode)); > - inode_dio_wait(inode); > - btrfs_inode_resume_unlocked_dio(BTRFS_I(inode)); > - > ret = btrfs_truncate(inode, newsize == oldsize); > if (ret && inode->i_nlink) { > int err; >