On Mon 25-02-13 20:07:41, Dmitry Monakhov wrote: > Splitting extents inside endio is bad thing, but unfortunetly it is still > possible. In fact we are pretty close to the moment when all related > issues will be fixed. Let's warn developer if it still the case. > > Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> Looks good. You can add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/ext4/extents.c | 13 ++++++++++++- > 1 files changed, 12 insertions(+), 1 deletions(-) > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > index 1d37f2d..78c2a91 100644 > --- a/fs/ext4/extents.c > +++ b/fs/ext4/extents.c > @@ -3386,8 +3386,19 @@ static int ext4_convert_unwritten_extents_endio(handle_t *handle, > "block %llu, max_blocks %u\n", inode->i_ino, > (unsigned long long)ee_block, ee_len); > > - /* If extent is larger than requested then split is required */ > + /* If extent is larger than requested it is a clear sign that we still > + * have some extent state machine issues left. So extent_split is still > + * required. > + * TODO: Once all related issues will be fixed this situation should be > + * illegal. > + */ > if (ee_block != map->m_lblk || ee_len > map->m_len) { > +#ifdef EXT4_DEBUG > + ext4_warning("Inode (%ld) finished: extent logical block %llu," > + " len %u; IO logical block %llu, len %u\n", > + inode->i_ino, (unsigned long long)ee_block, ee_len, > + (unsigned long long)map->m_lblk, map->m_len); > +#endif > err = ext4_split_unwritten_extents(handle, inode, map, path, > EXT4_GET_BLOCKS_CONVERT); > if (err < 0) > -- > 1.7.1 > -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- 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