Coly Li
unread,Aug 18, 2020, 6:34:06 PM8/18/20Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to linux...@vger.kernel.org, linux...@lists.infradead.org, net...@vger.kernel.org, open-...@googlegroups.com, linux...@vger.kernel.org, ceph-...@vger.kernel.org, linux-...@vger.kernel.org, Coly Li, Chaitanya Kulkarni, Chris Leech, Christoph Hellwig, Cong Wang, David S . Miller, Eric Dumazet, Hannes Reinecke, Ilya Dryomov, Jan Kara, Jeff Layton, Jens Axboe, Lee Duncan, Mike Christie, Mikhail Skorzhinskii, Philipp Reisner, Sagi Grimberg, Vasily Averin, Vlastimil Babka
This series was original by a bug fix in nvme-over-tcp driver which only
checked whether a page was allocated from slab allcoator, but forgot to
check its page_count: The page handled by sendpage should be neither a
Slab page nor 0 page_count page.
As Sagi Grimberg suggested, the original fix is refind to a more common
inline routine:
static inline bool sendpage_ok(struct page *page)
{
return (!PageSlab(page) && page_count(page) >= 1);
}
If sendpage_ok() returns true, the checking page can be handled by the
zero copy sendpage method in network layer.
The first patch in this series introduces sendpage_ok() in header file
include/linux/net.h, the second patch fixes the page checking issue in
nvme-over-tcp driver, the third patch adds page_count check by using
sendpage_ok() in do_tcp_sendpages() as Eric Dumazet suggested, and all
rested patches just replace existing open coded checks with the inline
sendpage_ok() routine.
Coly Li
Cc: Chaitanya Kulkarni <
chaitanya...@wdc.com>
Cc: Chris Leech <
cle...@redhat.com>
Cc: Christoph Hellwig <
h...@lst.de>
Cc: Cong Wang <
amw...@redhat.com>
Cc: David S. Miller <
da...@davemloft.net>
Cc: Eric Dumazet <
eric.d...@gmail.com>
Cc: Hannes Reinecke <
ha...@suse.de>
Cc: Ilya Dryomov <
idry...@gmail.com>
Cc: Jan Kara <
ja...@suse.com>
Cc: Jeff Layton <
jla...@kernel.org>
Cc: Jens Axboe <
ax...@kernel.dk>
Cc: Lee Duncan <
ldu...@suse.com>
Cc: Mike Christie <
mich...@cs.wisc.edu>
Cc: Mikhail Skorzhinskii <
mskorz...@solarflare.com>
Cc: Philipp Reisner <
philipp...@linbit.com>
Cc: Sagi Grimberg <
sa...@grimberg.me>
Cc: Vasily Averin <
v...@virtuozzo.com>
Cc: Vlastimil Babka <
vba...@suse.com>
---
Changelog:
v7: remove outer brackets from the return line of sendpage_ok() as
Eric Dumazet suggested.
v6: fix page check in do_tcp_sendpages(), as Eric Dumazet suggested.
replace other open coded checks with sendpage_ok() in libceph,
iscsi drivers.
v5, include linux/mm.h in include/linux/net.h
v4, change sendpage_ok() as an inline helper, and post it as
separate patch, as Christoph Hellwig suggested.
v3, introduce a more common sendpage_ok() as Sagi Grimberg suggested.
v2, fix typo in patch subject
v1, the initial version.
Coly Li (6):
net: introduce helper sendpage_ok() in include/linux/net.h
nvme-tcp: check page by sendpage_ok() before calling kernel_sendpage()
tcp: use sendpage_ok() to detect misused .sendpage
drbd: code cleanup by using sendpage_ok() to check page for
kernel_sendpage()
scsi: libiscsi: use sendpage_ok() in iscsi_tcp_segment_map()
libceph: use sendpage_ok() in ceph_tcp_sendpage()
drivers/block/drbd/drbd_main.c | 2 +-
drivers/nvme/host/tcp.c | 7 +++----
drivers/scsi/libiscsi_tcp.c | 2 +-
include/linux/net.h | 16 ++++++++++++++++
net/ceph/messenger.c | 2 +-
net/ipv4/tcp.c | 3 ++-
6 files changed, 24 insertions(+), 8 deletions(-)
--
2.26.2