From patchwork Fri Apr 27 18:13:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Dryomov X-Patchwork-Id: 10369589 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C2EC1601D3 for ; Fri, 27 Apr 2018 18:14:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B432229525 for ; Fri, 27 Apr 2018 18:14:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A8EC32955D; Fri, 27 Apr 2018 18:14:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4AACE29525 for ; Fri, 27 Apr 2018 18:14:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932571AbeD0SOK (ORCPT ); Fri, 27 Apr 2018 14:14:10 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:51858 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932430AbeD0SOH (ORCPT ); Fri, 27 Apr 2018 14:14:07 -0400 Received: by mail-wm0-f65.google.com with SMTP id j4so4016491wme.1 for ; Fri, 27 Apr 2018 11:14:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=56z4nDojuKqSB/6SuKIHYa+s0ScaG6gyQEXLgXYnrxI=; b=uTdSKJJG86/CN8OZk2nZaJS9EB10B5zpVDrruTlhe2MjBFEDs5cnPYdySB54I1ZWuL zAUHweA/XRfwXLLSEh8ZqwAEePoTcYMKUMN156Obj+ID+35rr7bhoQQzotXMXSTAatyN L7KeENLBvXcROQJWhxI4KqiXUWfJ5NKgRS+jKQbD3nsec4+4BZcskRHO7uLFSOVRyaAf niAdo0GcXuRr9x3yAtPrEglEkLP4wJDNt5yvKkjwQeUDKXtXdQfxpE4esGB2aLnQV8J7 VenMpWXv9i825AX3RKMlywNlS/UZSDskKSw513KUUU+DNVQTpBXpd3f7qS4J/ywPHHgw yFtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=56z4nDojuKqSB/6SuKIHYa+s0ScaG6gyQEXLgXYnrxI=; b=t3uIenZ/DsLfhayudhxD9Y3NLrCKHFPqxQKfel+moBBisug2Bqn9SYQqAS0XlrEIpt O5I8unpImhWHEzZlBvMa7d90NdO3Vc5DuP2Yk852PTwG8Vc46rQM0FlvH9bKAeYzdSIk qyvNLToekOT5SnqA7XrahtaKak93QDsal+bwyv7ut5MFO2Ww0/Sxx0ytnRQ7icfia+EW e3ePwxkl3Lk5zM5O7rmA2tWvbqkQ1KKCV6jtU8ytdVsCpiWc95/icYQIy78zEh2vPpS8 y7/+peN3yKvahJkvFbcHcYHeIpbtBmF6bHlvyyCiQAWUFTQVMeV0KcfyPuJFKo3fskR2 kP9g== X-Gm-Message-State: ALQs6tAG2HVDzRRl6RZj5MYDw7OtMeKpO0fSqjGKV6/B8HfKk9JGuwq/ Cq32Oklw7YCrW0eqO1V2EvZjtL7b X-Google-Smtp-Source: AB8JxZomLBdRdfrcqJJ+LDqDjPbzi0Ojc9BarG/S3TasxlD4n940syI25I1DWVF85APwVUyTHo4USQ== X-Received: by 10.28.213.198 with SMTP id m189mr2109174wmg.28.1524852846042; Fri, 27 Apr 2018 11:14:06 -0700 (PDT) Received: from orange.brq.redhat.com. (nat-pool-brq-t.redhat.com. [213.175.37.10]) by smtp.gmail.com with ESMTPSA id l1sm1496251wmh.25.2018.04.27.11.14.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Apr 2018 11:14:05 -0700 (PDT) From: Ilya Dryomov To: ceph-devel@vger.kernel.org Subject: [PATCH] libceph: use MSG_TRUNC for discarding received bytes Date: Fri, 27 Apr 2018 20:13:50 +0200 Message-Id: <1524852830-17085-1-git-send-email-idryomov@gmail.com> X-Mailer: git-send-email 2.4.3 Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Avoid a copy into the "skip buffer". Signed-off-by: Ilya Dryomov --- net/ceph/messenger.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index 809060786e75..ad65607916f3 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -168,12 +168,6 @@ static char tag_keepalive2 = CEPH_MSGR_TAG_KEEPALIVE2; static struct lock_class_key socket_class; #endif -/* - * When skipping (ignoring) a block of input we read it into a "skip - * buffer," which is this many bytes in size. - */ -#define SKIP_BUF_SIZE 1024 - static void queue_con(struct ceph_connection *con); static void cancel_con(struct ceph_connection *con); static void ceph_con_workfn(struct work_struct *); @@ -520,12 +514,18 @@ static int ceph_tcp_connect(struct ceph_connection *con) return 0; } +/* + * If @buf is NULL, discard up to @len bytes. + */ static int ceph_tcp_recvmsg(struct socket *sock, void *buf, size_t len) { struct kvec iov = {buf, len}; struct msghdr msg = { .msg_flags = MSG_DONTWAIT | MSG_NOSIGNAL }; int r; + if (!buf) + msg.msg_flags |= MSG_TRUNC; + iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, len); r = sock_recvmsg(sock, &msg, msg.msg_flags); if (r == -EAGAIN) @@ -2716,16 +2716,11 @@ static int try_read(struct ceph_connection *con) if (con->in_base_pos < 0) { /* * skipping + discarding content. - * - * FIXME: there must be a better way to do this! */ - static char buf[SKIP_BUF_SIZE]; - int skip = min((int) sizeof (buf), -con->in_base_pos); - - dout("skipping %d / %d bytes\n", skip, -con->in_base_pos); - ret = ceph_tcp_recvmsg(con->sock, buf, skip); + ret = ceph_tcp_recvmsg(con->sock, NULL, -con->in_base_pos); if (ret <= 0) goto out; + dout("skipped %d / %d bytes\n", ret, -con->in_base_pos); con->in_base_pos += ret; if (con->in_base_pos) goto more;