All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fox Chen <foxhlchen@gmail.com>
To: neilb@suse.de
Cc: Fox Chen <foxhlchen@gmail.com>,
	corbet@lwn.net, vegard.nossum@oracle.com,
	viro@zeniv.linux.org.uk, rdunlap@infradead.org,
	grandmaster@al2klimov.de, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org
Subject: [PATCH v3 08/13] docs: path-lookup: update i_op->put_link and cookie description
Date: Thu, 27 May 2021 17:16:13 +0800	[thread overview]
Message-ID: <20210527091618.287093-9-foxhlchen@gmail.com> (raw)
In-Reply-To: <20210527091618.287093-1-foxhlchen@gmail.com>

No inode->put_link operation anymore. We use delayed_call to
deal with link destruction. Cookie has been replaced with
struct delayed_call.

Related commit: commit fceef393a538 ("switch ->get_link() to
delayed_call, kill ->put_link()")

Signed-off-by: Fox Chen <foxhlchen@gmail.com>
---
 Documentation/filesystems/path-lookup.rst | 30 ++++++-----------------
 1 file changed, 8 insertions(+), 22 deletions(-)

diff --git a/Documentation/filesystems/path-lookup.rst b/Documentation/filesystems/path-lookup.rst
index 4650c6427963..3855809784cf 100644
--- a/Documentation/filesystems/path-lookup.rst
+++ b/Documentation/filesystems/path-lookup.rst
@@ -1066,34 +1066,20 @@ method. This is called both in RCU-walk and REF-walk. In RCU-walk the
 RCU-walk.  Much like the ``i_op->permission()`` method we
 looked at previously, ``->get_link()`` would need to be careful that
 all the data structures it references are safe to be accessed while
-holding no counted reference, only the RCU lock.  Though getting a
-reference with ``->follow_link()`` is not yet done in RCU-walk mode, the
-code is ready to release the reference when that does happen.
-
-This need to drop the reference to a symlink adds significant
-complexity.  It requires a reference to the inode so that the
-``i_op->put_link()`` inode operation can be called.  In REF-walk, that
-reference is kept implicitly through a reference to the dentry, so
-keeping the ``struct path`` of the symlink is easiest.  For RCU-walk,
-the pointer to the inode is kept separately.  To allow switching from
-RCU-walk back to REF-walk in the middle of processing nested symlinks
-we also need the seq number for the dentry so we can confirm that
-switching back was safe.
-
-Finally, when providing a reference to a symlink, the filesystem also
-provides an opaque "cookie" that must be passed to ``->put_link()`` so that it
-knows what to free.  This might be the allocated memory area, or a
-pointer to the ``struct page`` in the page cache, or something else
-completely.  Only the filesystem knows what it is.
+holding no counted reference, only the RCU lock. A callback
+``struct delayed_called`` will be passed to ``->get_link()``:
+file systems can set their own put_link function and argument through
+``set_delayed_call()``. Later on, when VFS wants to put link, it will call
+``do_delayed_call()`` to invoke that callback function with the argument.
 
 In order for the reference to each symlink to be dropped when the walk completes,
 whether in RCU-walk or REF-walk, the symlink stack needs to contain,
 along with the path remnants:
 
-- the ``struct path`` to provide a reference to the inode in REF-walk
-- the ``struct inode *`` to provide a reference to the inode in RCU-walk
+- the ``struct path`` to provide a reference to the previous path
+- the ``const char *`` to provide a reference to the to previous name
 - the ``seq`` to allow the path to be safely switched from RCU-walk to REF-walk
-- the ``cookie`` that tells ``->put_path()`` what to put.
+- the ``struct delayed_call`` for later invocation.
 
 This means that each entry in the symlink stack needs to hold five
 pointers and an integer instead of just one pointer (the path
-- 
2.31.1


  parent reply	other threads:[~2021-05-27  9:17 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-27  9:16 [PATCH v3 00/13] docs: path-lookup: Update pathlookup docs Fox Chen
2021-05-27  9:16 ` [PATCH v3 01/13] docs: path-lookup: update follow_managed() part Fox Chen
2021-05-27  9:16 ` [PATCH v3 02/13] docs: path-lookup: update path_to_nameidata() part Fox Chen
2021-05-27  9:16 ` [PATCH v3 03/13] docs: path-lookup: update path_mountpoint() part Fox Chen
2021-05-27  9:16 ` [PATCH v3 04/13] docs: path-lookup: update do_last() part Fox Chen
2021-05-27  9:16 ` [PATCH v3 05/13] docs: path-lookup: remove filename_mountpoint Fox Chen
2021-05-27  9:16 ` [PATCH v3 06/13] docs: path-lookup: Add macro name to symlink limit description Fox Chen
2021-05-27  9:16 ` [PATCH v3 07/13] docs: path-lookup: i_op->follow_link replaced with i_op->get_link Fox Chen
2021-05-27  9:16 ` Fox Chen [this message]
2021-05-27  9:16 ` [PATCH v3 09/13] docs: path-lookup: no get_link() Fox Chen
2021-05-27  9:16 ` [PATCH v3 10/13] docs: path-lookup: update WALK_GET, WALK_PUT desc Fox Chen
2021-06-17 22:31   ` NeilBrown
2021-05-27  9:16 ` [PATCH v3 11/13] docs: path-lookup: update get_link() ->follow_link description Fox Chen
2021-05-27  9:16 ` [PATCH v3 12/13] docs: path-lookup: update symlink description Fox Chen
2021-05-27  9:16 ` [PATCH v3 13/13] docs: path-lookup: use bare function() rather than literals Fox Chen
2021-06-17 22:35 ` [PATCH v3 00/13] docs: path-lookup: Update pathlookup docs NeilBrown
2021-06-18  1:00   ` Fox Chen
2021-06-18 17:39 ` Jonathan Corbet

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=20210527091618.287093-9-foxhlchen@gmail.com \
    --to=foxhlchen@gmail.com \
    --cc=corbet@lwn.net \
    --cc=grandmaster@al2klimov.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=rdunlap@infradead.org \
    --cc=vegard.nossum@oracle.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.