From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
To: Evgeniy Dushistov <dushistov@mail.ru>, Al Viro <viro@zeniv.linux.org.uk>
Cc: Ira Weiny <ira.weiny@intel.com>,
linux-kernel@vger.kernel.org, bpf@vger.kernel.org,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH v5 0/4] fs/ufs: Replace kmap() with kmap_local_page
Date: Mon, 27 Mar 2023 12:13:08 +0200 [thread overview]
Message-ID: <11383508.F0gNSz5aLb@suse> (raw)
In-Reply-To: <20221229225100.22141-1-fmdefrancesco@gmail.com>
On giovedì 29 dicembre 2022 23:50:56 CEST Fabio M. De Francesco wrote:
> kmap() is being deprecated in favor of kmap_local_page().
>
> There are two main problems with kmap(): (1) It comes with an overhead as
> the mapping space is restricted and protected by a global lock for
> synchronization and (2) it also requires global TLB invalidation when the
> kmap’s pool wraps and it might block when the mapping space is fully
> utilized until a slot becomes available.
>
> With kmap_local_page() the mappings are per thread, CPU local, can take
> page faults, and can be called from any context (including interrupts).
> It is faster than kmap() in kernels with HIGHMEM enabled. Furthermore,
> the tasks can be preempted and, when they are scheduled to run again, the
> kernel virtual addresses are restored and still valid.
>
> Since its use in fs/ufs is safe everywhere, it should be preferred.
>
> Therefore, replace kmap() with kmap_local_page() in fs/ufs. kunmap_local()
> requires the mapping address, so return that address from ufs_get_page()
> to be used in ufs_put_page().
Hi Al,
I see that this series is here since Dec 29, 2022.
Is there anything that prevents its merging?
Can you please its four patches in your tree?
Thanks,
Fabio
>
> This series could have not been ever made because nothing prevented the
> previous patch from working properly but Al Viro made a long series of
> very appreciated comments about how many unnecessary and redundant lines
> of code I could have removed. He could see things I was entirely unable
> to notice. Furthermore, he also provided solutions and details about how
> I could decompose a single patch into a small series of three
> independent units.[1][2][3]
>
> I want to thank him so much for the patience, kindness and the time he
> decided to spend to provide those analysis and write three messages full
> of interesting insights.[1][2][3]
>
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> Cc: Ira Weiny <ira.weiny@intel.com>
> Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
>
> Changes from v1:
> 1/3: No changes.
> 2/3: Restore the return of "err" that was mistakenly deleted
> together with the removal of the "out" label in
> ufs_add_link(). Thanks to Al Viro.[4]
> Return the address of the kmap()'ed page instead of a
> pointer to a pointer to the mapped page; a page_address()
> had been overlooked in ufs_get_page(). Thanks to Al
> Viro.[5]
> 3/3: Return the kernel virtual address got from the call to
> kmap_local_page() after conversion from kmap(). Again
> thanks to Al Viro.[6]
>
> Changes from v2:
> 1/3: No changes.
> 2/3: Rework ufs_get_page() because the previous version had two
> errors: (1) It could return an invalid pages with the out
> argument "page" and (2) it could return "page_address(page)"
> also in cases where read_mapping_page() returned an error
> and the page is never kmap()'ed. Thanks to Al Viro.[7]
> 3/3: Rework ufs_get_page() after conversion to
> kmap_local_page(), in accordance to the last changes in 2/3.
>
> Changes from v3:
> 1/3: No changes.
> 2/3: No changes.
> 3/3: Replace kunmap() with kunmap_local().
>
> Changes from v4:
> 1/4: It was 1/3.
> 2/4: Move the declaration of a page into an inner loop. Add Ira
> Weiny's "Reviewed-by" tag (thanks!).
> 3/4: Add this patch to use ufs_put_page() to replace three kunmap()
> and put_page() in namei.c. Thanks to Ira Weiny who noticed that
> I had overlooked their presence.
> 4/4: Remove an unnecessary masking that is already carried out by
> kunmap_local() via kunmap_local_indexed(). Add a comment to
> clarify that a ufs_dir_entry passed to ufs_delete_entry()
> points in the same page we need the address of. Suggested by
> Ira Weiny.
>
> [1] https://lore.kernel.org/lkml/Y4E++JERgUMoqfjG@ZenIV/#t
> [2] https://lore.kernel.org/lkml/Y4FG0O7VWTTng5yh@ZenIV/#t
> [3] https://lore.kernel.org/lkml/Y4ONIFJatIGsVNpf@ZenIV/#t
> [4] https://lore.kernel.org/lkml/Y5Zc0qZ3+zsI74OZ@ZenIV/#t
> [5] https://lore.kernel.org/lkml/Y5ZZy23FFAnQDR3C@ZenIV/#t
> [6] https://lore.kernel.org/lkml/Y5ZcMPzPG9h6C9eh@ZenIV/#t
> [7] https://lore.kernel.org/lkml/Y5glgpD7fFifC4Fi@ZenIV/#t
>
> The cover letter of the v1 series is at
> https://lore.kernel.org/lkml/20221211213111.30085-1-fmdefrancesco@gmail.com/
> The cover letter of the v2 series is at
> https://lore.kernel.org/lkml/20221212231906.19424-1-fmdefrancesco@gmail.com/
> The cover letter of the v3 series is at
> https://lore.kernel.org/lkml/20221217184749.968-1-fmdefrancesco@gmail.com/
> The cover letter of the v4 series is at
> https://lore.kernel.org/lkml/20221221172802.18743-1-fmdefrancesco@gmail.com/
>
> Fabio M. De Francesco (4):
> fs/ufs: Use the offset_in_page() helper
> fs/ufs: Change the signature of ufs_get_page()
> fs/ufs: Use ufs_put_page() in ufs_rename()
> fs/ufs: Replace kmap() with kmap_local_page()
>
> fs/ufs/dir.c | 131 +++++++++++++++++++++++++++----------------------
> fs/ufs/namei.c | 11 ++---
> fs/ufs/ufs.h | 1 +
> 3 files changed, 78 insertions(+), 65 deletions(-)
>
> --
> 2.39.0
next prev parent reply other threads:[~2023-03-27 10:13 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-29 22:50 [PATCH v5 0/4] fs/ufs: Replace kmap() with kmap_local_page Fabio M. De Francesco
2022-12-29 22:50 ` [PATCH v5 1/4] fs/ufs: Use the offset_in_page() helper Fabio M. De Francesco
2022-12-30 0:41 ` Ira Weiny
2022-12-29 22:50 ` [PATCH v5 2/4] fs/ufs: Change the signature of ufs_get_page() Fabio M. De Francesco
2022-12-29 22:50 ` [PATCH v5 3/4] fs/ufs: Use ufs_put_page() in ufs_rename() Fabio M. De Francesco
2022-12-30 0:50 ` Ira Weiny
2022-12-29 22:51 ` [PATCH v5 4/4] fs/ufs: Replace kmap() with kmap_local_page() Fabio M. De Francesco
2022-12-30 0:50 ` Ira Weiny
2023-03-27 10:13 ` Fabio M. De Francesco [this message]
2023-03-27 13:23 ` [PATCH v5 0/4] fs/ufs: Replace kmap() with kmap_local_page Matthew Wilcox
2023-04-03 5:27 ` Fabio M. De Francesco
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=11383508.F0gNSz5aLb@suse \
--to=fmdefrancesco@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=dushistov@mail.ru \
--cc=ira.weiny@intel.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--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.