linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.de>
To: Fox Chen <foxhlchen@gmail.com>,
	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: Re: [PATCH 08/12] docs: path-lookup: update i_op->put_link and cookie description
Date: Thu, 28 Jan 2021 14:50:04 +1100	[thread overview]
Message-ID: <877dnxhg9f.fsf@notabene.neil.brown.name> (raw)
In-Reply-To: <20210126072443.33066-9-foxhlchen@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3760 bytes --]

On Tue, Jan 26 2021, Fox Chen wrote:

> 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 

"Later", not "Latter".

Also, I'm not sure that the "Finally" at the start of the sentence makes
sense any more.  I think it was meant to introduce the final part of the
"significant complexity", but now that significant complexity is gone.
At least, I assume it is gone.  I haven't checked to code to see if
maybe it has just been moved.

NeilBrown


> +``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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 853 bytes --]

  reply	other threads:[~2021-01-28  4:06 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 ` [PATCH 08/12] docs: path-lookup: update i_op->put_link and cookie description Fox Chen
2021-01-28  3:50   ` NeilBrown [this message]
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=877dnxhg9f.fsf@notabene.neil.brown.name \
    --to=neilb@suse.de \
    --cc=corbet@lwn.net \
    --cc=foxhlchen@gmail.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).