From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Miller Subject: Re: [PATCH 10/11] nvmet-tcp: add NVMe over TCP target driver Date: Mon, 19 Nov 2018 17:44:35 -0800 (PST) Message-ID: <20181119.174435.86984692860441620.davem@davemloft.net> References: <20181119.151805.2250212740843808194.davem@davemloft.net> <0de07d6d-ed90-df0e-5710-1f5cdddd6187@grimberg.me> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: sagi@lightbitslabs.com, linux-block@vger.kernel.org, netdev@vger.kernel.org, keith.busch@intel.com, hch@lst.de, linux-nvme@lists.infradead.org To: sagi@grimberg.me Return-path: Received: from shards.monkeyblade.net ([23.128.96.9]:56046 "EHLO shards.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726119AbeKTMLM (ORCPT ); Tue, 20 Nov 2018 07:11:12 -0500 In-Reply-To: <0de07d6d-ed90-df0e-5710-1f5cdddd6187@grimberg.me> Sender: netdev-owner@vger.kernel.org List-ID: From: Sagi Grimberg Date: Mon, 19 Nov 2018 15:24:13 -0800 > >>> Also, looking a bit closer there is a slight difference between the >>> copy vs. the copy_and_csum variants. copy allows for a short_copy if >>> we copy less than we expect while the csum faults it. I'm thinking >>> that the copy_and_hash variant should also fault? Although I'm not >>> sure I understand the fault entirely as csum is supposed to be >>> cumulative, any insight? >> When we are writing and signal an error, sockets have this recurring >> pattern where we return immediately the amount of bytes successfully >> transferred. Then on the next sendmsg() call we give the error. >> I don't know if that is what is influencing the behavior here or not >> but it could be. > > That makes sense... Does recvmsg() have the same semantics? this is > the > rx path where we copy fragments to an iter.. I just checked and TCP at the very least behaves this way on recvmsg() (report short length, then -EFAULT on next recvmsg() call). It maintains a local variable "copied" which is increased every time skb_copy_datagram_msg() is successful. If in a subsequent iteration of the loop skb_copy_datagram_msg() returns -EFAULT, it will instead return 'copied' from recvmsg() if non-zero else the -EFAULT.