On Wed, Oct 09, 2019 at 11:30:21AM +0530, Ritesh Harjani wrote: > > +static u16 ext4_iomap_check_delalloc(struct inode *inode, > > + struct ext4_map_blocks *map) > > +{ > > + struct extent_status es; > > + ext4_lblk_t end = map->m_lblk + map->m_len - 1; > > + > > + ext4_es_find_extent_range(inode, &ext4_es_is_delayed, map->m_lblk, > > + end, &es); > > + > > + /* Entire range is a hole */ > > + if (!es.es_len || es.es_lblk > end) > > + return IOMAP_HOLE; > > + if (es.es_lblk <= map->m_lblk) { > > + ext4_lblk_t offset = 0; > > + > > + if (es.es_lblk < map->m_lblk) > > + offset = map->m_lblk - es.es_lblk; > > + map->m_lblk = es.es_lblk + offset; > This looks redundant no? map->m_lblk never changes actually. > So this is not needed here. Well, it depends if map->m_lblk == es.es_lblk + offset prior to the assignment? If that's always true, then sure, it'd be redundant. But honestly, I don't know what the downstream effect would be if this was removed. I'd have to look at the code, perform some tests, and figure it out. > > + map.m_lblk = first_block; > > + map.m_len = last_block = first_block + 1; > > + ret = ext4_map_blocks(NULL, inode, &map, 0); > > + if (ret < 0) > > + return ret; > > + if (ret == 0) > > + type = ext4_iomap_check_delalloc(inode, &map); > > + return ext4_set_iomap(inode, iomap, type, first_block, &map); > We don't need to send first_block here. Since map->m_lblk > is same as first_block. > Also with Jan comment, we don't even need 'type' parameter. > Then we should be able to rename the function > ext4_set_iomap ==> ext4_map_to_iomap. This better reflects what it is > doing. Thoughts? Depends on what we conclude in 1/8. :) I'm for removing 'first_block', but still not convinced removing 'type' is heading down the right track if I were to forward think a little. --<M>--