• Coly Li's avatar
    nvme-tcp: check page by sendpage_ok() before calling kernel_sendpage() · 7d4194ab
    Coly Li authored
    Currently nvme_tcp_try_send_data() doesn't use kernel_sendpage() to
    send slab pages. But for pages allocated by __get_free_pages() without
    __GFP_COMP, which also have refcount as 0, they are still sent by
    kernel_sendpage() to remote end, this is problematic.
    
    The new introduced helper sendpage_ok() checks both PageSlab tag and
    page_count counter, and returns true if the checking page is OK to be
    sent by kernel_sendpage().
    
    This patch fixes the page checking issue of nvme_tcp_try_send_data()
    with sendpage_ok(). If sendpage_ok() returns true, send this page by
    kernel_sendpage(), otherwise use sock_no_sendpage to handle this page.
    Signed-off-by: default avatarColy Li <colyli@suse.de>
    Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Jan Kara <jack@suse.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Mikhail Skorzhinskii <mskorzhinskiy@solarflare.com>
    Cc: Philipp Reisner <philipp.reisner@linbit.com>
    Cc: Sagi Grimberg <sagi@grimberg.me>
    Cc: Vlastimil Babka <vbabka@suse.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7d4194ab
tcp.c 64.3 KB