Linux-Doc Archive on
 help / color / Atom feed
From: Fox Chen <>
Cc: Fox Chen <>,,,,,,,,
Subject: [PATCH v2 08/12] docs: path-lookup: update i_op->put_link and cookie description
Date: Tue, 16 Mar 2021 13:47:23 +0800
Message-ID: <> (raw)
In-Reply-To: <>

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 <>
 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 e6b6c43ff0f6..8ab95dd9046e 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

  parent reply index

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-16  5:47 [PATCH v2 00/12] docs: path-lookup: Update pathlookup docs Fox Chen
2021-03-16  5:47 ` [PATCH v2 01/12] docs: path-lookup: update follow_managed() part Fox Chen
2021-04-19  0:52   ` NeilBrown
2021-04-19  2:17   ` Matthew Wilcox
2021-04-19  2:33     ` Fox Chen
2021-04-19  3:25       ` Matthew Wilcox
2021-04-19  3:33         ` Fox Chen
2021-04-19 19:22           ` Jonathan Corbet
2021-04-20  1:12             ` Fox Chen
2021-03-16  5:47 ` [PATCH v2 02/12] docs: path-lookup: update path_to_nameidata() part Fox Chen
2021-04-19  1:00   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 03/12] docs: path-lookup: update path_mountpoint() part Fox Chen
2021-04-19  1:03   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 04/12] docs: path-lookup: update do_last() part Fox Chen
2021-04-19  1:17   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 05/12] docs: path-lookup: remove filename_mountpoint Fox Chen
2021-04-19  1:20   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 06/12] docs: path-lookup: Add macro name to symlink limit description Fox Chen
2021-04-19  1:22   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 07/12] docs: path-lookup: i_op->follow_link replaced with i_op->get_link Fox Chen
2021-04-19  1:28   ` NeilBrown
2021-03-16  5:47 ` Fox Chen [this message]
2021-04-19  1:37   ` [PATCH v2 08/12] docs: path-lookup: update i_op->put_link and cookie description NeilBrown
2021-03-16  5:47 ` [PATCH v2 09/12] docs: path-lookup: no get_link() Fox Chen
2021-04-19  1:41   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 10/12] docs: path-lookup: update WALK_GET, WALK_PUT desc Fox Chen
2021-04-19  1:47   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 11/12] docs: path-lookup: update get_link() ->follow_link description Fox Chen
2021-04-19  1:54   ` NeilBrown
2021-03-16  5:47 ` [PATCH v2 12/12] docs: path-lookup: update symlink description Fox Chen
2021-04-19  1:59   ` NeilBrown
2021-04-19  2:34     ` Fox Chen
2021-04-13 21:18 ` [PATCH v2 00/12] docs: path-lookup: Update pathlookup docs Jonathan Corbet
2021-04-13 22:26   ` NeilBrown

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:

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

  git send-email \ \ \ \ \ \ \ \ \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-Doc Archive on

Archives are clonable:
	git clone --mirror linux-doc/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-doc linux-doc/ \
	public-inbox-index linux-doc

Example config snippet for mirrors

Newsgroup available over NNTP:

AGPL code for this site: git clone