From: Fox Chen <foxhlchen@gmail.com>
To: corbet@lwn.net, vegard.nossum@oracle.com,
viro@zeniv.linux.org.uk, rdunlap@infradead.org,
grandmaster@al2klimov.de
Cc: Fox Chen <foxhlchen@gmail.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 08/12] docs: path-lookup: update i_op->put_link and cookie description
Date: Tue, 26 Jan 2021 15:24:39 +0800 [thread overview]
Message-ID: <20210126072443.33066-9-foxhlchen@gmail.com> (raw)
In-Reply-To: <20210126072443.33066-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: fceef393a538134f03b778c5d2519e670269342f
Signed-off-by: Fox Chen <foxhlchen@gmail.com>
---
Documentation/filesystems/path-lookup.rst | 31 +++++++----------------
1 file changed, 9 insertions(+), 22 deletions(-)
diff --git a/Documentation/filesystems/path-lookup.rst b/Documentation/filesystems/path-lookup.rst
index 0a362849b26f..8572300b5405 100644
--- a/Documentation/filesystems/path-lookup.rst
+++ b/Documentation/filesystems/path-lookup.rst
@@ -1068,34 +1068,21 @@ 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.
+
+Finally, 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``. Latter 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.30.0
next prev parent reply other threads:[~2021-01-26 17:17 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-26 7:24 [PATCH 00/12] docs: path-lookup: Update pathlookup docs Fox Chen
2021-01-26 7:24 ` [PATCH 01/12] docs: path-lookup: update follow_managed() part Fox Chen
2021-01-26 14:03 ` Greg KH
2021-01-27 1:11 ` Fox Chen
2021-01-28 3:20 ` NeilBrown
2021-01-26 7:24 ` [PATCH 02/12] docs: path-lookup: update path_to_nameidata() parth Fox Chen
2021-01-28 3:24 ` NeilBrown
2021-01-26 7:24 ` [PATCH 03/12] docs: path-lookup: update path_mountpoint() part Fox Chen
2021-01-28 3:28 ` NeilBrown
2021-01-26 7:24 ` [PATCH 04/12] docs: path-lookup: update do_last() part Fox Chen
2021-01-28 3:50 ` NeilBrown
2021-01-26 7:24 ` [PATCH 05/12] docs: path-lookup: remove filename_mountpoint Fox Chen
2021-01-26 7:24 ` [PATCH 06/12] docs: path-lookup: Add macro name to symlink limit description Fox Chen
2021-01-26 7:24 ` [PATCH 07/12] docs: path-lookup: i_op->follow_link replaced with i_op->get_link Fox Chen
2021-01-28 3:53 ` NeilBrown
2021-01-26 7:24 ` Fox Chen [this message]
2021-01-28 3:50 ` [PATCH 08/12] docs: path-lookup: update i_op->put_link and cookie description NeilBrown
2021-01-26 7:24 ` [PATCH 09/12] docs: path-lookup: no get_link() Fox Chen
2021-01-26 7:24 ` [PATCH 10/12] docs: path-lookup: update WALK_GET, WALK_PUT desc Fox Chen
2021-01-26 7:24 ` [PATCH 11/12] docs: path-lookup: update get_link() ->follow_link description Fox Chen
2021-01-26 7:24 ` [PATCH 12/12] docs: path-lookup: update symlink description Fox Chen
2021-01-26 7:30 ` [PATCH 00/12] docs: path-lookup: Update pathlookup docs Fox Chen
2021-01-26 20:31 ` Jonathan Corbet
2021-01-28 1:23 ` Fox Chen
2021-01-28 3:58 ` NeilBrown
2021-01-29 1:29 ` Fox Chen
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=20210126072443.33066-9-foxhlchen@gmail.com \
--to=foxhlchen@gmail.com \
--cc=corbet@lwn.net \
--cc=grandmaster@al2klimov.de \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--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.