[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20191022075548.GB2436@quack2.suse.cz>
Date: Tue, 22 Oct 2019 09:55:48 +0200
From: Jan Kara <jack@...e.cz>
To: Matthew Bobrowski <mbobrowski@...browski.org>
Cc: Jan Kara <jack@...e.cz>, tytso@....edu, adilger.kernel@...ger.ca,
linux-ext4@...r.kernel.org, linux-fsdevel@...r.kernel.org,
hch@...radead.org, david@...morbit.com, darrick.wong@...cle.com
Subject: Re: [PATCH v5 12/12] ext4: introduce direct I/O write using iomap
infrastructure
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@...e.com>
SUSE Labs, CR
Powered by blists - more mailing lists