On Wed, Oct 09, 2019 at 11:52:41AM +0530, Ritesh Harjani wrote: > On 10/3/19 5:03 PM, Matthew Bobrowski wrote: > Minor comment, but otherwise. > Patch looks good to me. You may add: > > Reviewed-by: Ritesh Harjani <riteshh@xxxxxxxxxxxxx> *nod* - Thank you! > > static int ext4_iomap_begin(struct inode *inode, loff_t offset, loff_t length, > > unsigned flags, struct iomap *iomap) > > { > > @@ -3500,62 +3556,16 @@ static int ext4_iomap_begin(struct inode *inode, loff_t offset, loff_t length, > > } > > } > > } else if (flags & IOMAP_WRITE) { > > - int dio_credits; > > - handle_t *handle; > > - int retries = 0; > > - > > - /* Trim mapping request to maximum we can map at once for DIO */ > > - if (map.m_len > DIO_MAX_BLOCKS) > > - map.m_len = DIO_MAX_BLOCKS; > > - dio_credits = ext4_chunk_trans_blocks(inode, map.m_len); > > -retry: > > - /* > > - * Either we allocate blocks and then we don't get unwritten > > - * extent so we have reserved enough credits, or the blocks > > - * are already allocated and unwritten and in that case > > - * extent conversion fits in the credits as well. > > - */ > > - handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, > > - dio_credits); > > - if (IS_ERR(handle)) > > - return PTR_ERR(handle); > > - > > - ret = ext4_map_blocks(handle, inode, &map, > > - EXT4_GET_BLOCKS_CREATE_ZERO); > > - if (ret < 0) { > > - ext4_journal_stop(handle); > > - if (ret == -ENOSPC && > > - ext4_should_retry_alloc(inode->i_sb, &retries)) > > - goto retry; > > - return ret; > > - } > > - > > - /* > > - * If we added blocks beyond i_size, we need to make sure they > > - * will get truncated if we crash before updating i_size in > > - * ext4_iomap_end(). For faults we don't need to do that (and > > - * even cannot because for orphan list operations inode_lock is > > - * required) - if we happen to instantiate block beyond i_size, > > - * it is because we race with truncate which has already added > > - * the inode to the orphan list. > > - */ > > - if (!(flags & IOMAP_FAULT) && first_block + map.m_len > > > - (i_size_read(inode) + (1 << blkbits) - 1) >> blkbits) { > > - int err; > > - > > - err = ext4_orphan_add(handle, inode); > > - if (err < 0) { > > - ext4_journal_stop(handle); > > - return err; > > - } > > - } > > - ext4_journal_stop(handle); > > + ret = ext4_iomap_alloc(inode, flags, first_block, &map); > > We don't need "first_block" argument here. Since > map->m_lblk saves first_block directly above in the same function. You're right. I will change that. > No strong objection against ext4_iomap_alloc, but > maybe ext4_iomap_map_write sounds better? > Either way is fine though. I like 'ext4_iomap_alloc', because it's performing allocation in preparation for a write being performed on behalf of iomap. :) --<M>--