Messages in this thread | | | From | "Fabio M. De Francesco" <> | Subject | Re: [PATCH] nvmet-tcp: Don't map pages which can't come from HIGHMEM | Date | Tue, 30 Aug 2022 23:40:09 +0200 |
| |
On lunedì 29 agosto 2022 09:54:01 CEST Sagi Grimberg wrote: > From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com> > > kmap() is being deprecated in favor of kmap_local_page().[1] > > There are two main problems with kmap(): (1) It comes with an overhead as > 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. > > The pages which will be mapped are allocated in nvmet_tcp_map_data(), > using the GFP_KERNEL flag. This assures that they cannot come from > HIGHMEM. This imply that a straight page_address() can replace the kmap() > of sg_page(sg) in nvmet_tcp_map_pdu_iovec(). As a side effect, we might > also delete the field "nr_mapped" from struct "nvmet_tcp_cmd" because, > after removing the kmap() calls, there would be no longer any need of it. > > In addition, there is no reason to use a kvec for the command receive > data buffers iovec, use a bio_vec instead and let iov_iter handle the > buffer mapping and data copy. > > Test with blktests on a QEMU/KVM x86_32 VM, 6GB RAM, booting a kernel with > HIGHMEM64GB enabled. > > [1] "[PATCH] checkpatch: Add kmap and kmap_atomic to the deprecated > list" https://lore.kernel.org/all/20220813220034.806698-1-ira.weiny@intel.com/ > > Cc: Chaitanya Kulkarni <chaitanyak@nvidia.com> > Cc: Christoph Hellwig <hch@lst.de> > Cc: Keith Busch <kbusch@kernel.org> > Suggested-by: Ira Weiny <ira.weiny@intel.com> > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com> > [sagi: added bio_vec plus minor naming changes] > Signed-off-by: Sagi Grimberg <sagi@grimberg.me> > --- > drivers/nvme/target/tcp.c | 44 ++++++++++++--------------------------- > 1 file changed, 13 insertions(+), 31 deletions(-)
Hi Sagi,
Thanks for changing the code according to the suggestions from Christoph and Al.
Differently from what I just wrote while thanking Al, and after Ira made me notice that you are one of the maintainers, I decided to leave everything like you did.
The only exceptions we'll be about sending a v2 with the "Suggested-by" tags from Christoph and Al. In the meantime checkpatch warned that the alignment of "nr_pages" doesn't match the open parenthesis, so I'm changing it too.
Again thanks,
Fabio
| |