All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miklos Szeredi <miklos@szeredi.hu>
To: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Miklos Szeredi <mszeredi@redhat.com>,
	overlayfs <linux-unionfs@vger.kernel.org>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 09/11] vfs: factor out inode_insert5()
Date: Tue, 12 Jun 2018 14:38:40 +0200	[thread overview]
Message-ID: <20180612123840.GJ23785@veci.piliscsaba.redhat.com> (raw)
In-Reply-To: <20180611164355.GV30522@ZenIV.linux.org.uk>

On Mon, Jun 11, 2018 at 05:43:55PM +0100, Al Viro wrote:
> On Mon, Jun 11, 2018 at 01:32:30PM +0200, Miklos Szeredi wrote:
> 
> > Incremental follows.  I think it's cleaner to initialize i_state and i_sb_list
> > up front (hence the use of new_inode()), but could just as well add to sb list
> > afterwards.
> 
> > ---
> > diff --git a/fs/inode.c b/fs/inode.c
> > index 0df41bb77e0f..03c0d7c1296f 100644
> > --- a/fs/inode.c
> > +++ b/fs/inode.c
> > @@ -1098,8 +1098,10 @@ struct inode *iget5_locked(struct super_block *sb, unsigned long hashval,
> >  
> >  		if (new) {
> >  			inode = inode_insert5(new, hashval, test, set, data);
> > -			if (unlikely(inode != new))
> > -				iput(new);
> > +			if (unlikely(inode != new)) {
> > +				inode_sb_list_del(inode);
> > +				destroy_inode(new);
> > +			}
> 
> The thing is, until you put it into the list, it's invisible to everyone other
> than iget5_locked() - no references in any shared data structures.  Which
> outweighs the "it's somewhat irregular in not being on the list" considerably,
> as far as the complexity of analysis goes, especially since there are inodes
> that never get on that list and it's not something exotic - all sockets and
> pipes are that way, for starters.  So IMO that should be dealt with in
> inode_insert5().

Not sure I understand.

We can put inode_sb_list_add() into inode_insert5().  Then what about users of
new_inode() + insert_inode_locked4()?  Those supply an inode that is already on
the sb list.

What about adding to the list after inode_insert5() in the new inode case.

This should be equivalent to what we do currently, AFAICS.

---
diff --git a/fs/inode.c b/fs/inode.c
index 0df41bb77e0f..ad03d4abc600 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1094,12 +1094,14 @@ struct inode *iget5_locked(struct super_block *sb, unsigned long hashval,
 	struct inode *inode = ilookup5(sb, hashval, test, data);
 
 	if (!inode) {
-		struct inode *new = new_inode(sb);
+		struct inode *new = new_inode_pseudo(sb);
 
 		if (new) {
 			inode = inode_insert5(new, hashval, test, set, data);
 			if (unlikely(inode != new))
-				iput(new);
+				destroy_inode(new);
+			else
+				inode_sb_list_add(inode);
 		}
 	}
 	return inode;

  reply	other threads:[~2018-06-12 12:38 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-29 14:41 [PATCH 00/11] overlayfs fixes Miklos Szeredi
2018-05-29 14:41 ` [PATCH 01/11] ovl: update documentation for unionmount-testsuite Miklos Szeredi
2018-05-29 14:41 ` [PATCH 02/11] ovl: remove WARN_ON() real inode attributes mismatch Miklos Szeredi
2018-05-29 14:41 ` [PATCH 03/11] ovl: strip debug argument from ovl_do_ helpers Miklos Szeredi
2018-05-29 14:41 ` [PATCH 04/11] ovl: struct cattr cleanups Miklos Szeredi
2018-05-29 14:41 ` [PATCH 05/11] ovl: return dentry from ovl_create_real() Miklos Szeredi
2018-05-29 15:24   ` Amir Goldstein
2018-05-30  8:28     ` Miklos Szeredi
2018-05-29 14:41 ` [PATCH 06/11] ovl: create helper ovl_create_temp() Miklos Szeredi
2018-05-29 14:41 ` [PATCH 07/11] ovl: make ovl_create_real() cope with vfs_mkdir() safely Miklos Szeredi
2018-05-29 15:29   ` Amir Goldstein
2018-05-30  8:18     ` Miklos Szeredi
2018-05-29 14:41 ` [PATCH 08/11] ovl: clean up copy-up error paths Miklos Szeredi
2018-05-29 14:41 ` [PATCH 09/11] vfs: factor out inode_insert5() Miklos Szeredi
2018-06-10  5:49   ` Al Viro
2018-06-10  6:02     ` Al Viro
2018-06-11  9:15       ` Miklos Szeredi
2018-06-11 11:32         ` Miklos Szeredi
2018-06-11 16:43           ` Al Viro
2018-06-12 12:38             ` Miklos Szeredi [this message]
2018-05-29 14:41 ` [PATCH 10/11] ovl: Pass argument to ovl_get_inode() in a structure Miklos Szeredi
2018-05-29 14:41 ` [PATCH 11/11] ovl: use inode_insert5() to hash a newly created inode Miklos Szeredi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180612123840.GJ23785@veci.piliscsaba.redhat.com \
    --to=miklos@szeredi.hu \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-unionfs@vger.kernel.org \
    --cc=mszeredi@redhat.com \
    --cc=viro@ZenIV.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.