Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2939127pxb; Tue, 19 Jan 2021 09:31:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJxPYJCV7wvHy4ZWO3JYVzX49ItfyUBpyIidm45O8HwkOkCW0UFF+xNQmnYwOeHUYXTULvlO X-Received: by 2002:aa7:da41:: with SMTP id w1mr4398912eds.24.1611077498111; Tue, 19 Jan 2021 09:31:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611077498; cv=none; d=google.com; s=arc-20160816; b=lBl3KaauhjkJTOtleBPH3IT3rlK8wnmp8AdmvCleNRIkOetqNGb+eJt27nvhotWWIg 41VJQpddVSUMb4Y/gAtEiB0bIrDz8e5Lejv69+VNTxwAKQ1p0VFn1J4JLZJB9Jbn6AuZ v0jVc3MLnuhgXhB2N0axRZosa9RHXWlvDkJlZnZ6JFWVazFWyYbMkElx5pl/PyzqYhcJ gIRn3Zyrfl2axUGBExuG23CH23Pk8DCqJRrlyFS14F0FQ3bZ/DKlRnwNNCR5DRitwX/p 3mcSHHz/LNmh/OwigUcfYpwZd9TL0aEpy4+w/5y4YhzH9Ui9qvnovPrnCCcxdOJ2yczL CBIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=miO8IFC6ZPt0NUfckp/+Ru0Nyqz5UMCD7tv+lfp0Sn4=; b=b3B1TqKFxI5j3D6MGyQ0SdwVh++vVLQAACu9a2xlc8Jfr7h+mivC+0ifgxwL5CJ68P UuOvf97tcuqJgHOWM2E4jpBw6RpEHuJ7wn43NsMsByMI1dMdwfSNV0VpwEo99p7bPCQ5 kd75HdUjQzqbmChkLAosUEmTIQOGic9DpjfuSE8SjKfuIoUYKuJ4eLuoTSM4HhAg6M5g SuSPjyanEPcKjcaFyqm7WKEcK8Pfivm5FK+y9DqOndX1zIYu5lfhMbONEyugEqaOnuJ1 UBntaA8vvEuUVMGBdCc12wIpQE7waJ9yXtqg8s62MEqSuwAC/vI5+obvRYLJg5lNt/z3 Xa0Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c10si8505054ejs.369.2021.01.19.09.31.10; Tue, 19 Jan 2021 09:31:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391626AbhASR3G (ORCPT + 99 others); Tue, 19 Jan 2021 12:29:06 -0500 Received: from smtp.infotech.no ([82.134.31.41]:59521 "EHLO smtp.infotech.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389631AbhASRKv (ORCPT ); Tue, 19 Jan 2021 12:10:51 -0500 Received: from localhost (localhost [127.0.0.1]) by smtp.infotech.no (Postfix) with ESMTP id BF9CE2041AC; Tue, 19 Jan 2021 18:09:39 +0100 (CET) X-Virus-Scanned: by amavisd-new-2.6.6 (20110518) (Debian) at infotech.no Received: from smtp.infotech.no ([127.0.0.1]) by localhost (smtp.infotech.no [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zpIfBtn7j-PD; Tue, 19 Jan 2021 18:09:33 +0100 (CET) Received: from xtwo70.bingwo.ca (host-104-157-204-209.dyn.295.ca [104.157.204.209]) by smtp.infotech.no (Postfix) with ESMTPA id B534220418D; Tue, 19 Jan 2021 18:09:31 +0100 (CET) From: Douglas Gilbert To: linux-scsi@vger.kernel.org, linux-block@vger.kernel.org, target-devel@vger.kernel.org, linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org Cc: martin.petersen@oracle.com, jejb@linux.vnet.ibm.com, bostroesser@gmail.com, ddiss@suse.de, bvanassche@acm.org Subject: [PATCH 0/3] scatterlist: sgl-sgl ops: copy, equal Date: Tue, 19 Jan 2021 12:09:25 -0500 Message-Id: <20210119170928.79805-1-dgilbert@interlog.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Scatter-gather lists (sgl_s) are frequently used as data carriers in the block layer. For example the SCSI and NVMe subsystems interchange data with the block layer using sgl_s. The sgl API is declared in The author has extended these transient sgl use cases to a store (i.e. a ramdisk) in the scsi_debug driver. Other new potential uses of sgl_s could be for the target subsystem. When this extra step is taken, the need to copy between sgl_s becomes apparent. The patchset adds sgl_copy_sgl(), sgl_equal_sgl() and sgl_memset(). Changes since v6 [posted 20210118]: - restarted with new patchset name, was "scatterlist: add new capabilities" - drop correction patch "sgl_alloc_order: remove 4 GiB limit, sgl_free() warning"; could be sent separately as a fix - rename sgl_compare_sgl() to sg_equal_sgl() and the helper to sg_equal_sgl_idx() Changes since v5 [posted 20201228]: - incorporate review requests from Jason Gunthorpe - replace integer overflow detection code in sgl_alloc_order() with a pre-condition statement - rebase on lk 5.11.0-rc4 Changes since v4 [posted 20201105]: - rebase on lk 5.10.0-rc2 Changes since v3 [posted 20201019]: - re-instate check on integer overflow of nent calculation in sgl_alloc_order(). Do it in such a way as to not limit the overall sgl size to 4 GiB - introduce sgl_compare_sgl_idx() helper function that, if requested and if a miscompare is detected, will yield the byte index of the first miscompare. - add Reviewed-by tags from Bodo Stroesser - rebase on lk 5.10.0-rc2 [was on lk 5.9.0] Changes since v2 [posted 20201018]: - remove unneeded lines from sgl_memset() definition. - change sg_zero_buffer() to call sgl_memset() as the former is a subset. Changes since v1 [posted 20201016]: - Bodo Stroesser pointed out a problem with the nesting of kmap_atomic() [called via sg_miter_next()] and kunmap_atomic() calls [called via sg_miter_stop()] and proposed a solution that simplifies the previous code. - the new implementation of the three functions has shorter periods when pre-emption is disabled (but has more them). This should make operations on large sgl_s more pre-emption "friendly" with a relatively small performance hit. - sgl_memset return type changed from void to size_t and is the number of bytes actually (over)written. That number is needed anyway internally so may as well return it as it may be useful to the caller. This patchset is against lk 5.11.0-rc4 Douglas Gilbert (3): scatterlist: add sgl_copy_sgl() function scatterlist: add sgl_equal_sgl() function scatterlist: add sgl_memset() include/linux/scatterlist.h | 32 ++++- lib/scatterlist.c | 233 ++++++++++++++++++++++++++++++++---- 2 files changed, 243 insertions(+), 22 deletions(-) -- 2.25.1