On Tue 22-10-19 14:02:35, Matthew Bobrowski wrote: > On Mon, Oct 21, 2019 at 06:18:48PM +0200, Jan Kara wrote: > > > + if (extend) { > > > + ret = ext4_handle_inode_extension(inode, ret, offset, count); > > > + > > > + /* > > > + * We may have failed to remove the inode from the orphan list > > > + * in the case that the i_disksize got update due to delalloc > > > + * writeback while the direct I/O was running. We need to make > > > + * sure we remove it from the orphan list as if we've > > > + * prematurely popped it onto the list. > > > + */ > > > + if (!list_empty(&EXT4_I(inode)->i_orphan)) { > > > + handle = ext4_journal_start(inode, EXT4_HT_INODE, 2); > > > + if (IS_ERR(handle)) { > > > + ret = PTR_ERR(handle); > > > + if (inode->i_nlink) > > > + ext4_orphan_del(NULL, inode); > > > + goto out; > > > + } > > > + > > > + if (inode->i_nlink) > > > > This check can be joined with the list_empty() check above to save us from > > unnecessarily starting a transaction. > > Yes, easy done. > > > Also I was wondering whether it would not make more sense have this > > orphan handling bit also in > > ext4_handle_inode_extension(). ext4_dax_write_iter() doesn't > > strictly need it (as for DAX i_disksize cannot currently change > > while ext4_dax_write_iter() is running) but it would look more > > robust to me for the future users and it certainly doesn't hurt > > ext4_dax_write_iter() case. > > I was thinking the same, but to be honest I wasn't entirely sure how > it would pan out for the DAX code path. However, seeing as though you > don't forsee there being any problems, then I can't really think of a > reason not to roll this up into ext4_handle_inode_extension(). > > So, in ext4_handle_inode_extension() for the initial check against > i_disksize, rather than returning 'written' and then having > ext4_dio_write_iter() perform the cleanup, we could simply jump to a > chunk of code in ext4_handle_inode_extension() and deal with it there, > or quite literally just cleanup if that branch is taken there and then > seeing as though it's not really needed in any other case? What do you > think? Yeah, the last option makes the most sense to me. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR