All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Eric Biggers <ebiggers@kernel.org>
Cc: kernel-team@android.com, linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH] f2fs: get parent inode when recovering pino
Date: Tue, 5 May 2020 12:08:30 -0700	[thread overview]
Message-ID: <20200505190830.GD55221@google.com> (raw)
In-Reply-To: <20200505190108.GB128280@sol.localdomain>

On 05/05, Eric Biggers wrote:
> On Tue, May 05, 2020 at 11:49:32AM -0700, Jaegeuk Kim wrote:
> > How about this?
> > 
> > From 2a6b0e53e592854306062a2dc35db2d8f79062f2 Mon Sep 17 00:00:00 2001
> > From: Jaegeuk Kim <jaegeuk@kernel.org>
> > Date: Tue, 5 May 2020 11:33:29 -0700
> > Subject: [PATCH] f2fs: find a living dentry when finding parent ino
> > 
> > We need to check any dentry still alive to get parent inode number.
> > 
> > Suggested-by: Eric Biggers <ebiggers@kernel.org>
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> >  fs/f2fs/file.c | 5 ++---
> >  1 file changed, 2 insertions(+), 3 deletions(-)
> > 
> > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > index a0a4413d6083b..95139cb85faca 100644
> > --- a/fs/f2fs/file.c
> > +++ b/fs/f2fs/file.c
> > @@ -169,9 +169,8 @@ static int get_parent_ino(struct inode *inode, nid_t *pino)
> >  {
> >  	struct dentry *dentry;
> >  
> > -	inode = igrab(inode);
> > -	dentry = d_find_any_alias(inode);
> > -	iput(inode);
> > +	/* Need to check if valid dentry still exists. */
> > +	dentry = d_find_alias(inode);
> >  	if (!dentry)
> >  		return 0;
> >  
> 
> It's fine, but it could use some more explanation.  (What's a "valid dentry"?)
> How about the following?

Cool, I took this. Thanks,

> 
> >From f8fe7d57eead1423e8548ac7a5ec881d701466a5 Mon Sep 17 00:00:00 2001
> From: Eric Biggers <ebiggers@google.com>
> Date: Tue, 5 May 2020 11:41:11 -0700
> Subject: [PATCH] f2fs: correctly fix the parent inode number during fsync()
> 
> fsync() may be called on a deleted file that's still open.  So when
> fsync() tries to set the parent inode number when the inode has
> LOST_PINO and i_nlink == 1 (to avoid later checkpoints), it needs to
> make sure to get the parent directory via a non-deleted alias.
> 
> Also remove the unnecessary igrab() and iput(), as the caller already
> holds a reference to the inode.
> 
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
>  fs/f2fs/file.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 6ab8f621a3c5a2..b3069188fd3478 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -165,9 +165,11 @@ static int get_parent_ino(struct inode *inode, nid_t *pino)
>  {
>  	struct dentry *dentry;
>  
> -	inode = igrab(inode);
> -	dentry = d_find_any_alias(inode);
> -	iput(inode);
> +	/*
> +	 * Make sure to get the non-deleted alias.  The alias associated with
> +	 * the open file descriptor being fsync()'ed may be deleted already.
> +	 */
> +	dentry = d_find_alias(inode);
>  	if (!dentry)
>  		return 0;
>  
> -- 
> 2.26.2


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

WARNING: multiple messages have this Message-ID (diff)
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Eric Biggers <ebiggers@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, kernel-team@android.com
Subject: Re: [f2fs-dev] [PATCH] f2fs: get parent inode when recovering pino
Date: Tue, 5 May 2020 12:08:30 -0700	[thread overview]
Message-ID: <20200505190830.GD55221@google.com> (raw)
In-Reply-To: <20200505190108.GB128280@sol.localdomain>

On 05/05, Eric Biggers wrote:
> On Tue, May 05, 2020 at 11:49:32AM -0700, Jaegeuk Kim wrote:
> > How about this?
> > 
> > From 2a6b0e53e592854306062a2dc35db2d8f79062f2 Mon Sep 17 00:00:00 2001
> > From: Jaegeuk Kim <jaegeuk@kernel.org>
> > Date: Tue, 5 May 2020 11:33:29 -0700
> > Subject: [PATCH] f2fs: find a living dentry when finding parent ino
> > 
> > We need to check any dentry still alive to get parent inode number.
> > 
> > Suggested-by: Eric Biggers <ebiggers@kernel.org>
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > ---
> >  fs/f2fs/file.c | 5 ++---
> >  1 file changed, 2 insertions(+), 3 deletions(-)
> > 
> > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> > index a0a4413d6083b..95139cb85faca 100644
> > --- a/fs/f2fs/file.c
> > +++ b/fs/f2fs/file.c
> > @@ -169,9 +169,8 @@ static int get_parent_ino(struct inode *inode, nid_t *pino)
> >  {
> >  	struct dentry *dentry;
> >  
> > -	inode = igrab(inode);
> > -	dentry = d_find_any_alias(inode);
> > -	iput(inode);
> > +	/* Need to check if valid dentry still exists. */
> > +	dentry = d_find_alias(inode);
> >  	if (!dentry)
> >  		return 0;
> >  
> 
> It's fine, but it could use some more explanation.  (What's a "valid dentry"?)
> How about the following?

Cool, I took this. Thanks,

> 
> >From f8fe7d57eead1423e8548ac7a5ec881d701466a5 Mon Sep 17 00:00:00 2001
> From: Eric Biggers <ebiggers@google.com>
> Date: Tue, 5 May 2020 11:41:11 -0700
> Subject: [PATCH] f2fs: correctly fix the parent inode number during fsync()
> 
> fsync() may be called on a deleted file that's still open.  So when
> fsync() tries to set the parent inode number when the inode has
> LOST_PINO and i_nlink == 1 (to avoid later checkpoints), it needs to
> make sure to get the parent directory via a non-deleted alias.
> 
> Also remove the unnecessary igrab() and iput(), as the caller already
> holds a reference to the inode.
> 
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
>  fs/f2fs/file.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 6ab8f621a3c5a2..b3069188fd3478 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -165,9 +165,11 @@ static int get_parent_ino(struct inode *inode, nid_t *pino)
>  {
>  	struct dentry *dentry;
>  
> -	inode = igrab(inode);
> -	dentry = d_find_any_alias(inode);
> -	iput(inode);
> +	/*
> +	 * Make sure to get the non-deleted alias.  The alias associated with
> +	 * the open file descriptor being fsync()'ed may be deleted already.
> +	 */
> +	dentry = d_find_alias(inode);
>  	if (!dentry)
>  		return 0;
>  
> -- 
> 2.26.2

  reply	other threads:[~2020-05-05 19:08 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-05 15:31 [f2fs-dev] [PATCH] f2fs: get parent inode when recovering pino Jaegeuk Kim
2020-05-05 15:31 ` Jaegeuk Kim
2020-05-05 16:58 ` [f2fs-dev] " Eric Biggers
2020-05-05 16:58   ` Eric Biggers
2020-05-05 17:59   ` Eric Biggers
2020-05-05 17:59     ` Eric Biggers
2020-05-05 18:20     ` Jaegeuk Kim
2020-05-05 18:20       ` Jaegeuk Kim
2020-05-05 18:13   ` Jaegeuk Kim
2020-05-05 18:13     ` Jaegeuk Kim
2020-05-05 18:19     ` Eric Biggers
2020-05-05 18:19       ` Eric Biggers
2020-05-05 18:49       ` Jaegeuk Kim
2020-05-05 18:49         ` Jaegeuk Kim
2020-05-05 19:01         ` Eric Biggers
2020-05-05 19:01           ` Eric Biggers
2020-05-05 19:08           ` Jaegeuk Kim [this message]
2020-05-05 19:08             ` Jaegeuk Kim
2020-05-06  0:14       ` Gao Xiang
2020-05-06  0:14         ` Gao Xiang
2020-05-06  1:24         ` Eric Biggers
2020-05-06  1:24           ` Eric Biggers
2020-05-06  1:58           ` Gao Xiang via Linux-f2fs-devel
2020-05-06  1:58             ` Gao Xiang
2020-05-06  6:47             ` Gao Xiang
2020-05-06  6:47               ` Gao Xiang
2020-05-06 19:16               ` Eric Biggers
2020-05-06 19:16                 ` Eric Biggers
2020-05-06 22:36                 ` Gao Xiang
2020-05-06 22:36                   ` Gao Xiang
2020-05-07  6:38                   ` Chao Yu
2020-05-07  6:38                     ` Chao Yu
2020-05-07  7:23                     ` Gao Xiang
2020-05-07  7:23                       ` Gao Xiang
2020-05-06  6:55           ` Chao Yu
2020-05-06  6:55             ` Chao Yu
2020-05-07  6:30             ` Chao Yu
2020-05-07  6:30               ` Chao Yu

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=20200505190830.GD55221@google.com \
    --to=jaegeuk@kernel.org \
    --cc=ebiggers@kernel.org \
    --cc=kernel-team@android.com \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    /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.