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 concrete zero-copy sendpage method in network layer.
The v10 series has 7 patches, fixes a WARN_ONCE() usage from v9 series, - The 1st patch in this series introduces sendpage_ok() in header file include/linux/net.h. - The 2nd patch adds WARN_ONCE() for improper zero-copy send in kernel_sendpage(). - The 3rd patch fixes the page checking issue in nvme-over-tcp driver. - The 4th patch adds page_count check by using sendpage_ok() in do_tcp_sendpages() as Eric Dumazet suggested. - The 5th and 6th patches just replace existing open coded checks with the inline sendpage_ok() routine. Coly Li Cc: Chaitanya Kulkarni <chaitanya.kulka...@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.duma...@gmail.com> Cc: Hannes Reinecke <h...@suse.de> Cc: Ilya Dryomov <idryo...@gmail.com> Cc: Jan Kara <j...@suse.com> Cc: Jeff Layton <jlay...@kernel.org> Cc: Jens Axboe <ax...@kernel.dk> Cc: Lee Duncan <ldun...@suse.com> Cc: Mike Christie <micha...@cs.wisc.edu> Cc: Mikhail Skorzhinskii <mskorzhins...@solarflare.com> Cc: Philipp Reisner <philipp.reis...@linbit.com> Cc: Sagi Grimberg <s...@grimberg.me> Cc: Vasily Averin <v...@virtuozzo.com> Cc: Vlastimil Babka <vba...@suse.com> --- Changelog: v10, fix WARN_ONCE() usage, and add Reivewed-by tag from Lee Duncan. v9, fix a typo pointed out by Greg KH. add Acked-by tags from Martin K. Petersen and Ilya Dryomov. v8: add WARN_ONCE() in kernel_sendpage() as Christoph suggested. 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 (7): net: introduce helper sendpage_ok() in include/linux/net.h net: add WARN_ONCE in kernel_sendpage() for improper zero-copy send 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 ++- net/socket.c | 6 ++++-- 7 files changed, 28 insertions(+), 10 deletions(-) -- 2.26.2