All of lore.kernel.org
 help / color / mirror / Atom feed
From: Amir Goldstein <amir73il@gmail.com>
To: John Johansen <john.johansen@canonical.com>,
	Trond Myklebust <trond.myklebust@hammerspace.com>,
	Anna Schumaker <Anna.Schumaker@netapp.com>,
	"Steven Rostedt (VMware)" <rostedt@goodmis.org>,
	Greg KH <gregkh@linuxfoundation.org>,
	Doug Ledford <dledford@redhat.com>,
	Jason Gunthorpe <jgg@mellanox.com>,
	Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Christoph Hellwig <hch@lst.de>, Joel Becker <jlbec@evilplan.org>
Cc: Jan Kara <jack@suse.cz>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Al Viro <viro@zeniv.linux.org.uk>
Subject: Fwd: [PATCH v2 02/14] fs: create simple_remove() helper
Date: Thu, 16 May 2019 18:08:40 +0300	[thread overview]
Message-ID: <CAOQ4uxigP4rP=+h=_OXhetFd2ZWmYeLnv=zjUp21qV=sP5VtSQ@mail.gmail.com> (raw)
In-Reply-To: <20190516102641.6574-3-amir73il@gmail.com>

Dear pseudo fs maintainer,

Today you received a patch from me titled
"fs: convert <your>fs to use simple_remove() helper"

The patch that you received depends on this patch from my series
and this patch is obviously needed for the context of your review.

Please review the use of the helper as a cleanup/refactoring
patch for your fs that should not change logic regardless of the wider
scope of my series.

For complete context and motivation, please see the rest of the series at:
https://lore.kernel.org/linux-fsdevel/20190516102641.6574-1-amir73il@gmail.com/

Thanks,
Amir.

---------- Forwarded message ---------
From: Amir Goldstein <amir73il@gmail.com>
Date: Thu, May 16, 2019 at 1:26 PM
Subject: [PATCH v2 02/14] fs: create simple_remove() helper
To: Jan Kara <jack@suse.cz>
Cc: Matthew Bobrowski <mbobrowski@mbobrowski.org>,
<linux-fsdevel@vger.kernel.org>


There is a common pattern among pseudo filesystems for removing a dentry
from code paths that are NOT coming from vfs_{unlink,rmdir}, using a
combination of simple_{unlink,rmdir} and d_delete().

Create an helper to perform this common operation.  This helper is going
to be used as a place holder for the new fsnotify_{unlink,rmdir} hooks.

Signed-off-by: Amir Goldstein <amir73il@gmail.com>
---
 fs/libfs.c         | 27 +++++++++++++++++++++++++++
 include/linux/fs.h |  1 +
 2 files changed, 28 insertions(+)

diff --git a/fs/libfs.c b/fs/libfs.c
index 4b59b1816efb..ca1132f1d5c6 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -353,6 +353,33 @@ int simple_rmdir(struct inode *dir, struct dentry *dentry)
 }
 EXPORT_SYMBOL(simple_rmdir);

+/*
+ * Unlike simple_unlink/rmdir, this helper is NOT called from vfs_unlink/rmdir.
+ * Caller must guaranty that d_parent and d_name are stable.
+ */
+int simple_remove(struct inode *dir, struct dentry *dentry)
+{
+       int ret;
+
+       /*
+        * 'simple_' operations get a dentry reference on create/mkdir and drop
+        * it on unlink/rmdir. So we have to get dentry reference here to
+        * protect d_delete() from accessing a freed dentry.
+        */
+       dget(dentry);
+       if (d_is_dir(dentry))
+               ret = simple_rmdir(dir, dentry);
+       else
+               ret = simple_unlink(dir, dentry);
+
+       if (!ret)
+               d_delete(dentry);
+       dput(dentry);
+
+       return ret;
+}
+EXPORT_SYMBOL(simple_remove);
+
 int simple_rename(struct inode *old_dir, struct dentry *old_dentry,
                  struct inode *new_dir, struct dentry *new_dentry,
                  unsigned int flags)
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f7fdfe93e25d..74ea5f0b3b9d 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -3245,6 +3245,7 @@ extern int simple_open(struct inode *inode,
struct file *file);
 extern int simple_link(struct dentry *, struct inode *, struct dentry *);
 extern int simple_unlink(struct inode *, struct dentry *);
 extern int simple_rmdir(struct inode *, struct dentry *);
+extern int simple_remove(struct inode *, struct dentry *);
 extern int simple_rename(struct inode *, struct dentry *,
                         struct inode *, struct dentry *, unsigned int);
 extern int noop_fsync(struct file *, loff_t, loff_t, int);
--
2.17.1

  reply	other threads:[~2019-05-16 15:08 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-16 10:26 [PATCH v2 00/14] Sort out fsnotify_nameremove() mess Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 01/14] ASoC: rename functions that pollute the simple_xxx namespace Amir Goldstein
2019-05-17  1:04   ` Kuninori Morimoto
2019-05-21 20:32   ` Applied "ASoC: rename functions that pollute the simple_xxx namespace" to the asoc tree Mark Brown
2019-05-21 20:32     ` Mark Brown
2019-05-16 10:26 ` [PATCH v2 02/14] fs: create simple_remove() helper Amir Goldstein
2019-05-16 15:08   ` Amir Goldstein [this message]
2019-05-16 17:07   ` Al Viro
2019-05-16 18:42     ` Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 03/14] fsnotify: add empty fsnotify_{unlink,rmdir}() hooks Amir Goldstein
2019-05-16 15:30   ` Fwd: " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 04/14] fs: convert hypfs to use simple_remove() helper Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 05/14] fs: convert qibfs/ipathfs " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 06/14] fs: convert debugfs " Amir Goldstein
2019-05-16 10:35   ` Greg Kroah-Hartman
2019-05-16 10:44     ` Amir Goldstein
2019-05-16 12:02       ` Jan Kara
2019-05-16 12:09         ` Amir Goldstein
2019-05-16 15:28           ` Greg Kroah-Hartman
2019-05-16 15:38             ` Amir Goldstein
2019-05-16 16:52               ` Greg Kroah-Hartman
2019-05-16 18:47                 ` Amir Goldstein
2019-05-23  4:53   ` [fs] ae1cf04e22: BUG:KASAN:use-after-free_in__debugfs_remove kernel test robot
2019-05-16 10:26 ` [PATCH v2 07/14] fs: convert tracefs to use simple_remove() helper Amir Goldstein
2019-05-17 17:33   ` Steven Rostedt
2019-05-16 10:26 ` [PATCH v2 08/14] fs: convert rpc_pipefs " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 09/14] fs: convert apparmorfs " Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 10/14] fsnotify: call fsnotify_rmdir() hook from btrfs Amir Goldstein
2019-05-16 11:56   ` David Sterba
2019-05-16 10:26 ` [PATCH v2 11/14] fsnotify: call fsnotify_rmdir() hook from configfs Amir Goldstein
2019-05-16 12:33   ` Christoph Hellwig
2019-05-16 13:38     ` Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 12/14] fsnotify: call fsnotify_unlink() hook from devpts Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 13/14] fsnotify: move fsnotify_nameremove() hook out of d_delete() Amir Goldstein
2019-05-16 10:26 ` [PATCH v2 14/14] fsnotify: get rid of fsnotify_nameremove() Amir Goldstein
2019-05-16 10:40 ` [PATCH v2 00/14] Sort out fsnotify_nameremove() mess Amir Goldstein
2019-05-16 12:25 ` Jan Kara
2019-05-16 13:56   ` Amir Goldstein
2019-05-16 16:17     ` Al Viro

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='CAOQ4uxigP4rP=+h=_OXhetFd2ZWmYeLnv=zjUp21qV=sP5VtSQ@mail.gmail.com' \
    --to=amir73il@gmail.com \
    --cc=Anna.Schumaker@netapp.com \
    --cc=dledford@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@lst.de \
    --cc=heiko.carstens@de.ibm.com \
    --cc=jack@suse.cz \
    --cc=jgg@mellanox.com \
    --cc=jlbec@evilplan.org \
    --cc=john.johansen@canonical.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=schwidefsky@de.ibm.com \
    --cc=trond.myklebust@hammerspace.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.