Davide Italiano <dccitaliano@xxxxxxxxx> writes: > ext4_zero_range() and ext4_collapse_range() duplicate > the check in ext4_fallocate(). The checks are made with > inode lock held when there's no need for that. Remove them, > reducing the scope of the lock. NAK. Other task can convert indirect<=>extent via ioctl(, EXT4_IOC_SETFLAGS, flags) ->ext4_ext_migrate() ->ext4_int_migrate() So we _must_ recheck EXT4_INODE_EXTENTS after we grab i_mutex. > > Signed-off-by: Davide Italiano <dccitaliano@xxxxxxxxx> > --- > fs/ext4/extents.c | 16 ---------------- > 1 file changed, 16 deletions(-) > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > index bed4308..9e6fa09 100644 > --- a/fs/ext4/extents.c > +++ b/fs/ext4/extents.c > @@ -4810,15 +4810,6 @@ static long ext4_zero_range(struct file *file, loff_t offset, > flags |= EXT4_GET_BLOCKS_KEEP_SIZE; > > mutex_lock(&inode->i_mutex); > - > - /* > - * Indirect files do not support unwritten extnets > - */ > - if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) { > - ret = -EOPNOTSUPP; > - goto out_mutex; > - } > - > if (!(mode & FALLOC_FL_KEEP_SIZE) && > offset + len > i_size_read(inode)) { > new_size = offset + len; > @@ -5445,13 +5436,6 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len) > ret = -EINVAL; > goto out_mutex; > } > - > - /* Currently just for extent based files */ > - if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { > - ret = -EOPNOTSUPP; > - goto out_mutex; > - } > - > truncate_pagecache(inode, ioffset); > > /* Wait for existing dio to complete */ > -- > 2.3.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-ext4" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html
Attachment:
signature.asc
Description: PGP signature