From patchwork Mon Oct 29 17:40:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990453 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JdM95rlG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMl0nXGz9sBj for ; Tue, 30 Oct 2018 04:41:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727992AbeJ3Cak (ORCPT ); Mon, 29 Oct 2018 22:30:40 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:44747 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727988AbeJ3Cak (ORCPT ); Mon, 29 Oct 2018 22:30:40 -0400 Received: by mail-qk1-f193.google.com with SMTP id n12so5450454qkh.11; Mon, 29 Oct 2018 10:41:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=k6kHDi/G4VXAWe0Fwif0qGkn8F6UDS8N2NPKlrgg+Dk=; b=JdM95rlG/P3XhZyykf51LnONduhvJoZw4GLuVpNHoYwCPBK80b+e2CTwrPMNOps8lY DC1dtPgfFkZvjAi8LzoNFZwblxZUP8UaIicPzPUmTcOCbu8lPqWEIVCVLgobldCxwxbS 8rHxkMcZH6sHkJuTUlIN9dHqSaWZDxQuV+SFFOzHCxCPGq3IbbeMIrJLJTXl+zYHGhAq 828Q8PO/gu9Si1+gCO5qXz3ldEYD6C2fNOQz17tkRDPVBkQKPn5nqZmReVJXJ4B+z1Yn 49W2Cxyh4T0U0lW9R8ubGYkBC1Ngg1vZXI49btIS01B3MgjYig2ZCNFmEiiE7OhnPZOA G13A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=k6kHDi/G4VXAWe0Fwif0qGkn8F6UDS8N2NPKlrgg+Dk=; b=kMNTfdTlDKSEuDdP8+KNaN5ogrV70w6rQsqJH/6pRgL/RiY1WXT+Mv6QTcAPeRP1fC 3xCuOLMrWJb4PJJ7FAShTlSpHZ7olL3jcAoGT6jhtAl4YwCcbO1B8Vua2BvrUb42BAsl PaV6mJYGBkcV/CPmW4HochByFBM/hnSv8rHthiDaBoUQNVm/5ROcC/ly/j+IvRY2DSQN PmDTaIQA3150DqniGzrAw+JM+HzGbXnAlZykyr7Qt2EGeIeKjhpiokiHc0EvApippPBL QGNnu2wXmWgGf1hDMjb1z/tYlXOHaQzBfNSFI1p5sILEB3RQBzU9D5uXfZYYX4s2u006 Rmmw== X-Gm-Message-State: AGRZ1gKAdgLzfEAaIGMA8qqMkfm+EuCHUZFgWgbTEZDwmhIk0pIyvMpg omklOat957S0KHY9IcnNw3DShp0x X-Google-Smtp-Source: AJdET5e0UAjtMwQ00OEWkSVgd0LDA+fnEfzTcoSZO51sdezu4gDC9vcD/6BjFcs/S2bcqP7c2RLoEw== X-Received: by 2002:a37:91c2:: with SMTP id t185-v6mr7539438qkd.223.1540834863054; Mon, 29 Oct 2018 10:41:03 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.01 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:02 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH 1/1] NFSv4: cleanup remove unused nfs4_xdev_fs_type Date: Mon, 29 Oct 2018 13:40:47 -0400 Message-Id: <20181029174059.38326-2-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia commit e8f25e6d6d19 "NFS: Remove the NFS v4 xdev mount function" removed the last use of this. Signed-off-by: Olga Kornievskaia --- fs/nfs/internal.h | 1 - 1 file changed, 1 deletion(-) diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 8357ff6..ecb6d43 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -395,7 +395,6 @@ int nfs_rename(struct inode *, struct dentry *, extern struct file_system_type nfs_fs_type; extern struct file_system_type nfs_xdev_fs_type; #if IS_ENABLED(CONFIG_NFS_V4) -extern struct file_system_type nfs4_xdev_fs_type; extern struct file_system_type nfs4_referral_fs_type; #endif bool nfs_auth_info_match(const struct nfs_auth_info *, rpc_authflavor_t); From patchwork Mon Oct 29 17:40:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990455 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ceA7t9Hx"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMn2ZXzz9s3q for ; Tue, 30 Oct 2018 04:41:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727998AbeJ3Can (ORCPT ); Mon, 29 Oct 2018 22:30:43 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:34909 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbeJ3Can (ORCPT ); Mon, 29 Oct 2018 22:30:43 -0400 Received: by mail-qk1-f194.google.com with SMTP id v68-v6so5476548qka.2; Mon, 29 Oct 2018 10:41:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=zRxwbIgi/nx4F/08g2W9WJaMoLvFn8Iu27inV//7XF0=; b=ceA7t9HxW4jDusqAbre11zG+DExfHQckhjpqyIrPyYLKB5PTzHG5HHDP1CHOcMe1dU wxmf/ONl57Po59DZK6rhEK6amKU9R1ewN71Mtl5g/snNJ3RVloGU4xJq7yqK8VCE6wk6 qshENUnrKH/I5CRUbf11+ZvpbV0hBeKrxoyVSYkmsBmK+R0B3zNer7L2T3gHfANjcTEY zf/CpfY/WofHwlYAZUuK+FuinKu2wlJSiJSpRRhIf/p0ErGxsmOMOP3yUXSc8Qy6jGCm 87l6/oP+B4etOGzk90QdQuW4DQZZynhoMaAPcRi4p3/0UJz4xb2rzKB/+EBdjF00Vj0d veUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=zRxwbIgi/nx4F/08g2W9WJaMoLvFn8Iu27inV//7XF0=; b=kqySjfztgvGHtrzQiwmJ7piujUjbd29y+ZBbqmBEmWMankOfLOVxDniRIIDfXPMoRy O1kHxKCToIMAPXTqhhF4LEHll7PS2OfN4wBI54RfSufl6S5ChnH8ReUXtosS9ZQT2J1H t7oWJ/h47TtAc/2f7w0/hUgFSofNnV4pVANzPhl+woi2ePsoCPcygdbE84463VRDVhki oMaqoa6iTtCI7EJL9mFyyOGB6o2ce+K5NEG1T5nGZMFfm0MLhImIcqOK5WJbjQ4uKmQz sssZk6RxqWHl7aVGCpNbPkZcxVEdKFjzGFl54diI5eizDpaHy6nrPv1k1iUbp5bfkNmx s7bQ== X-Gm-Message-State: AGRZ1gJALmUdlw4/YPa2ylzB19T7nUejMKliYu2ctvrFmLcQWqXWG0Ci yRivxBZjag/e5IKwIdkGkBo= X-Google-Smtp-Source: AJdET5clmZ4KkA1z1jTzMW7SGVitgJuL0Mcvzbkvw8WUNnfMha7xN/I4DtmTDCZ3cyxDVDJRAK0Dtg== X-Received: by 2002:a37:a5d1:: with SMTP id o200mr12943420qke.328.1540834866347; Mon, 29 Oct 2018 10:41:06 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.04 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:05 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 02/12] VFS: generic cross-device copy_file_range() support for all filesystems Date: Mon, 29 Oct 2018 13:40:49 -0400 Message-Id: <20181029174059.38326-4-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia If a filesystem does not support cross device or cross file system type copy offload functionality, then this patch provides a fallback to a page cache based physical data copy. This means the copy_file_range() systemcall will never fail with EXDEV, and so in future userspace will not need to detect or provide a fallback for failed cross-device copies anymore. Signed-off-by: Olga Kornievskaia Reviewed-by: Matthew Wilcox --- fs/read_write.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/read_write.c b/fs/read_write.c index 7a912e3..cff59bd 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1597,7 +1597,7 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in, if (file_out->f_op->copy_file_range) { ret = file_out->f_op->copy_file_range(file_in, pos_in, file_out, pos_out, len, flags); - if (ret != -EOPNOTSUPP) + if (ret != -EOPNOTSUPP && ret != -EXDEV) goto done; } From patchwork Mon Oct 29 17:40:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990456 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="b9bbIPLf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMq1Wr3z9s3q for ; Tue, 30 Oct 2018 04:41:11 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728026AbeJ3Cap (ORCPT ); Mon, 29 Oct 2018 22:30:45 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:40944 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728018AbeJ3Cap (ORCPT ); Mon, 29 Oct 2018 22:30:45 -0400 Received: by mail-qk1-f194.google.com with SMTP id f18-v6so5459694qkm.7; Mon, 29 Oct 2018 10:41:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nArMGW/INjteRrujdLkp69gM/ZmeUcX82tVQQvtlFnc=; b=b9bbIPLfQkJBvd/RAAj15xtNYr8QT6E7nNx3lEbpJgpN1RDAJdjdTk+dtbh9tgXAcG hkd1WyLUd++HUj2mweK4uq4xVuk950rWSoo6sbI55Zqgwo3HamzC67OUitiqeBctKi0F ZqJAy20RurB/Uw/4q6CF1k866V11sF2mZ8tswI+VzuKxgyTE1f3via6UXAEgtb8Gel1s qdmYk/1oVKU55d6Excyh8mbbTPogjwCKQn5XMhvucC2iiTyQlxu5sO+0pdVJPXG6hdw5 Hb6oMsvJqOWaZG5Yh97RG3re942YAfIigZl1ahxbWsepLCNbVXmghSXs6jeV4fSSKc1C zzQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nArMGW/INjteRrujdLkp69gM/ZmeUcX82tVQQvtlFnc=; b=Wd7RN5LNlistnCUkUDFPnXwnyQFvs8FOFHjr943qPF0RQQroBT3vkdFKeL3+Ux2sDv 3jOSBmXdQ1xpZkBguYu4ySsfnYcNYvM5wfckyt9jQ7w5R7o01LIwJdksXOJaFTQfQplB Kp9c1DRv1ZlzfokfZXYq/H8lJqlEXogDmvLCLWmdHJdoh0YC4KeI0aSPkVcBvxSWZgsE wuquyr9pyhut0jvC7JOeWoRyBzQD3AjU4fvUzJBt3iL+EKz3LspCTLHuYVmDr/u3AOsi r9y+eCCbxOSgsdLgwEcuugbwE6uYb0+PdQIf3Pmmpli1TtgAKAeeHQbHJnj/8WBqFuh1 gXTw== X-Gm-Message-State: AGRZ1gLmSM4QzOSpf2HCfSR3N/fuO0EfdE7xCz3mAcJOri5KNYO+R2MM 3uK9NW4YqG2Ii3F7bUOTCBE= X-Google-Smtp-Source: AJdET5cpn12/Q++l067RcI17lUG5zlz6VtUP3DY9G9bsTYZlouZf3x8YtHE5Fcvr08cxFKo3lIysIA== X-Received: by 2002:a37:1b46:: with SMTP id b67mr13210824qkb.144.1540834867889; Mon, 29 Oct 2018 10:41:07 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.06 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:07 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 03/12] NFS: validity check for source offset in copy_file_range Date: Mon, 29 Oct 2018 13:40:50 -0400 Message-Id: <20181029174059.38326-5-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia Input source offset can not be beyond the end of the file. Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs4file.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index 5a73c90..7838bdf 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -135,6 +135,9 @@ static ssize_t nfs4_copy_file_range(struct file *file_in, loff_t pos_in, { ssize_t ret; + if (pos_in >= i_size_read(file_inode(file_in))) + return -EINVAL; + if (file_inode(file_in)->i_sb != file_inode(file_out)->i_sb) return -EXDEV; From patchwork Mon Oct 29 17:40:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990457 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JfXeKTxl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMr5r5jz9s3q for ; Tue, 30 Oct 2018 04:41:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728036AbeJ3Car (ORCPT ); Mon, 29 Oct 2018 22:30:47 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:34099 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbeJ3Caq (ORCPT ); Mon, 29 Oct 2018 22:30:46 -0400 Received: by mail-qk1-f193.google.com with SMTP id a132so5489259qkg.1; Mon, 29 Oct 2018 10:41:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CNj2pCMxPlcH1fEKnenx/QqOVUgHVEB5Ekmf2YUbfVA=; b=JfXeKTxlyulMMtigTci4rQFzaymnMXYE/zRUUbXhSK+5DWIv9M4+bRSOwhaBB4C/0f 1PE5jy17xbY+BGAJno/ofqw/B60ME2D9KcRAT85Awbb0hqR5+Ow6/X1JuTlY6xHDOPpz 8MyMM2GeNFvMHgOGjdnbKpVBtpc5tQUXjku0r65i/YrQv0N1ZkzCWYFutApGWUkAYwKI d0/0uVBc5K+P3uNsyRnM52Rx34R8GSLD5rzXAb1eWeXjHg6SN/XVTHMbpQv1n+RWrQgQ udkK1199e8YbemKGVpgeLbhCjrQ+tEdiX5n4VuetquyN5qyJVbgVtO/3cq9ynFxZB8fZ cYsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CNj2pCMxPlcH1fEKnenx/QqOVUgHVEB5Ekmf2YUbfVA=; b=qinTwb/M6Y5y0M9AuJ0cPO1pAAnpU9bXui8KdM+JM3dIrHp8bYHAhC8sVwU5Xd79Ti wVE8S+rSW59hCo2b7GWWBVNHKHUyGr4LkLbZzW0cKEwxjJGd/xXA6celkvG7HTydqNtK o66QRWJsJjdVVhh1wDntB+B2a7w25YH13NvkdyFFtEQy7AEkQZO0NNq1os7m1GWaFdaT j+fygDGfvSiFXUBGV61BDpgT7ho4fYvDX/VgbAzJHCC4uy3Gcic4rfyf5ahzDvXQT+/I CfXQXxeFzcmyJghHu8jsSD058Fx9wfG4SnuPEAMzpChxWql/WcuN+8sclZmRnumcp0yk 3XIA== X-Gm-Message-State: AGRZ1gK1FZPmJw9RnpAxZjp56Q5vpydqXGKgBd6ursF3Mz1hybB/BYPL uVGGAyLWa7BPD4fsQBbwh5A= X-Google-Smtp-Source: AJdET5e1cGvPizEUVNJ/rzXIjUootGq97/yYRadEKDCon4BdsG8DOThbEsjKgBd/z5z+K+D6SrDBgQ== X-Received: by 2002:a37:611:: with SMTP id 17mr6506899qkg.123.1540834869198; Mon, 29 Oct 2018 10:41:09 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.07 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:08 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 04/12] NFS NFSD: defining nl4_servers structure needed by both Date: Mon, 29 Oct 2018 13:40:51 -0400 Message-Id: <20181029174059.38326-6-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia These structures are needed by COPY_NOTIFY on the client and needed by the nfsd as well Reviewed-by: Jeff Layton Signed-off-by: Olga Kornievskaia --- include/linux/nfs4.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index 1b06f0b..4803507 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h @@ -16,6 +16,7 @@ #include #include #include +#include enum nfs4_acl_whotype { NFS4_ACL_WHO_NAMED = 0, @@ -672,4 +673,27 @@ struct nfs4_op_map { } u; }; +struct nfs42_netaddr { + char netid[RPCBIND_MAXNETIDLEN]; + char addr[RPCBIND_MAXUADDRLEN + 1]; + u32 netid_len; + u32 addr_len; +}; + +enum netloc_type4 { + NL4_NAME = 1, + NL4_URL = 2, + NL4_NETADDR = 3, +}; + +struct nl4_server { + enum netloc_type4 nl4_type; + union { + struct { /* NL4_NAME, NL4_URL */ + int nl4_str_sz; + char nl4_str[NFS4_OPAQUE_LIMIT + 1]; + }; + struct nfs42_netaddr nl4_addr; /* NL4_NETADDR */ + } u; +}; #endif From patchwork Mon Oct 29 17:40:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990458 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="RuWp1tic"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMs5RmGz9s2P for ; Tue, 30 Oct 2018 04:41:13 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728058AbeJ3Cat (ORCPT ); Mon, 29 Oct 2018 22:30:49 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:34922 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbeJ3Cas (ORCPT ); Mon, 29 Oct 2018 22:30:48 -0400 Received: by mail-qk1-f195.google.com with SMTP id v68-v6so5476720qka.2; Mon, 29 Oct 2018 10:41:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=sxpwy6K01WTZfX4+OAfEXIBBPNNAjwngI4oqBhF7nFk=; b=RuWp1ticFxR75cTpAp8vuif6L4RpRzshNWVp7uSZPjihJc0pPLU5/91mnbswyvuyFr Nt+L+j5Mez/h4+Y94QqaqisJGpHgAIl+rQorTzdAAkfDzjLxoRIQDmgUJpvm88mWKqlQ X+ja4ixYJ3c0D4GND/jpafEWeQ68UkZDXa9REBKLI5XiBhXLU0TNf7skfqsKlvRv9+Oi C77JkPiEuq7Wgc7BRhoWIRqTyHTxI+dDwqer0GrI+T2nI8Zp1fJSML1aOg64pmhfV3Hj 412qw4VGadtO2HV81wxysuyme18fsQUAOY4weg5eDYROfYQHvO4H2UjE7aKiVaJVazXp XrXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=sxpwy6K01WTZfX4+OAfEXIBBPNNAjwngI4oqBhF7nFk=; b=XNEY13ZcSXIuO1RDtl3MuQfaAl2HULIKbN1EJnGCkQXUsrvBrW9WL9YrUijzXME3Vt BX1YwniTNX+zNdegZgpvJsHc7xUtYeZpZJekMa+L1RjO8pn4qVdRSjG/93mNAj+A0WzN /O+xqKl1FtlBEIMT+K8aUtfYgsTxdoT7JAifsKHOVNPPO9GVddA14fzRe5y4ist0jWie WGeG8CpF7o/X79fC5Njnp7wz0VSya/86iB1c8QXZEepspXDQDO5k24XKDOxFmAUSNE/l 5gNjGpLEfRohylj2FjcdA8BsOi5rkvb2UqRmVUcmsUF6JMSn4fM374Pbu6g/dRybN95z HV+A== X-Gm-Message-State: AGRZ1gLCp+FZj8hrtFep2eltuqDzVnuelIgI0q0KZ/lWz//VNHi0MaTd /9WpJZfo53KcrJ+zUdUmLek= X-Google-Smtp-Source: AJdET5dEOg1FJ8Np9pNuUeWXSG8KKQqnPvNjmDqbIrtoXKct7DfueevYYpkIk6Vhp9b+We9jdDosow== X-Received: by 2002:a37:37d5:: with SMTP id e204-v6mr12864929qka.1.1540834870671; Mon, 29 Oct 2018 10:41:10 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.09 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:10 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 05/12] NFS: add COPY_NOTIFY operation Date: Mon, 29 Oct 2018 13:40:52 -0400 Message-Id: <20181029174059.38326-7-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia Try using the delegation stateid, then the open stateid. Only NL4_NETATTR, No support for NL4_NAME and NL4_URL. Allow only one source server address to be returned for now. To distinguish between same server copy offload ("intra") and a copy between different server ("inter"), do a check of server owner identity. Reviewed-by: Jeff Layton Signed-off-by: Andy Adamson Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs42.h | 12 +++ fs/nfs/nfs42proc.c | 91 +++++++++++++++++++++++ fs/nfs/nfs42xdr.c | 181 ++++++++++++++++++++++++++++++++++++++++++++++ fs/nfs/nfs4_fs.h | 2 + fs/nfs/nfs4client.c | 2 +- fs/nfs/nfs4file.c | 14 ++++ fs/nfs/nfs4proc.c | 1 + fs/nfs/nfs4xdr.c | 1 + include/linux/nfs4.h | 1 + include/linux/nfs_fs_sb.h | 1 + include/linux/nfs_xdr.h | 16 ++++ 11 files changed, 321 insertions(+), 1 deletion(-) diff --git a/fs/nfs/nfs42.h b/fs/nfs/nfs42.h index 19ec38f8..bbe49a3 100644 --- a/fs/nfs/nfs42.h +++ b/fs/nfs/nfs42.h @@ -13,6 +13,7 @@ #define PNFS_LAYOUTSTATS_MAXDEV (4) /* nfs4.2proc.c */ +#ifdef CONFIG_NFS_V4_2 int nfs42_proc_allocate(struct file *, loff_t, loff_t); ssize_t nfs42_proc_copy(struct file *, loff_t, struct file *, loff_t, size_t); int nfs42_proc_deallocate(struct file *, loff_t, loff_t); @@ -20,5 +21,16 @@ int nfs42_proc_layoutstats_generic(struct nfs_server *, struct nfs42_layoutstat_data *); int nfs42_proc_clone(struct file *, struct file *, loff_t, loff_t, loff_t); +int nfs42_proc_copy_notify(struct file *, struct file *, + struct nfs42_copy_notify_res *); +static inline bool nfs42_files_from_same_server(struct file *in, + struct file *out) +{ + struct nfs_client *c_in = (NFS_SERVER(file_inode(in)))->nfs_client; + struct nfs_client *c_out = (NFS_SERVER(file_inode(out)))->nfs_client; + return nfs4_check_serverowner_major_id(c_in->cl_serverowner, + c_out->cl_serverowner); +} +#endif /* CONFIG_NFS_V4_2 */ #endif /* __LINUX_FS_NFS_NFS4_2_H */ diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index ac5b784..b1c57a4 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -3,6 +3,7 @@ * Copyright (c) 2014 Anna Schumaker */ #include +#include #include #include #include @@ -15,10 +16,30 @@ #include "pnfs.h" #include "nfs4session.h" #include "internal.h" +#include "delegation.h" #define NFSDBG_FACILITY NFSDBG_PROC static int nfs42_do_offload_cancel_async(struct file *dst, nfs4_stateid *std); +static void nfs42_set_netaddr(struct file *filep, struct nfs42_netaddr *naddr) +{ + struct nfs_client *clp = (NFS_SERVER(file_inode(filep)))->nfs_client; + unsigned short port = 2049; + + rcu_read_lock(); + naddr->netid_len = scnprintf(naddr->netid, + sizeof(naddr->netid), "%s", + rpc_peeraddr2str(clp->cl_rpcclient, + RPC_DISPLAY_NETID)); + naddr->addr_len = scnprintf(naddr->addr, + sizeof(naddr->addr), + "%s.%u.%u", + rpc_peeraddr2str(clp->cl_rpcclient, + RPC_DISPLAY_ADDR), + port >> 8, port & 255); + rcu_read_unlock(); +} + static int _nfs42_proc_fallocate(struct rpc_message *msg, struct file *filep, struct nfs_lock_context *lock, loff_t offset, loff_t len) { @@ -461,6 +482,76 @@ static int nfs42_do_offload_cancel_async(struct file *dst, return status; } +int _nfs42_proc_copy_notify(struct file *src, struct file *dst, + struct nfs42_copy_notify_args *args, + struct nfs42_copy_notify_res *res) +{ + struct nfs_server *src_server = NFS_SERVER(file_inode(src)); + struct rpc_message msg = { + .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_COPY_NOTIFY], + .rpc_argp = args, + .rpc_resp = res, + }; + int status; + struct nfs_open_context *ctx; + struct nfs_lock_context *l_ctx; + + ctx = get_nfs_open_context(nfs_file_open_context(src)); + l_ctx = nfs_get_lock_context(ctx); + if (IS_ERR(l_ctx)) + return PTR_ERR(l_ctx); + + status = nfs4_set_rw_stateid(&args->cna_src_stateid, ctx, l_ctx, + FMODE_READ); + nfs_put_lock_context(l_ctx); + if (status) + return status; + + status = nfs4_call_sync(src_server->client, src_server, &msg, + &args->cna_seq_args, &res->cnr_seq_res, 0); + if (status == -ENOTSUPP) + src_server->caps &= ~NFS_CAP_COPY_NOTIFY; + + put_nfs_open_context(nfs_file_open_context(src)); + return status; +} + +int nfs42_proc_copy_notify(struct file *src, struct file *dst, + struct nfs42_copy_notify_res *res) +{ + struct nfs_server *src_server = NFS_SERVER(file_inode(src)); + struct nfs42_copy_notify_args *args; + struct nfs4_exception exception = { + .inode = file_inode(src), + }; + int status; + + if (!(src_server->caps & NFS_CAP_COPY_NOTIFY)) + return -EOPNOTSUPP; + + args = kzalloc(sizeof(struct nfs42_copy_notify_args), GFP_NOFS); + if (args == NULL) + return -ENOMEM; + + args->cna_src_fh = NFS_FH(file_inode(src)), + args->cna_dst.nl4_type = NL4_NETADDR; + nfs42_set_netaddr(dst, &args->cna_dst.u.nl4_addr); + exception.stateid = &args->cna_src_stateid; + + do { + status = _nfs42_proc_copy_notify(src, dst, args, res); + if (status == -ENOTSUPP) { + status = -EOPNOTSUPP; + goto out; + } + status = nfs4_handle_exception(src_server, status, &exception); + } while (exception.retry); + +out: + kfree(args); + return status; +} + static loff_t _nfs42_proc_llseek(struct file *filep, struct nfs_lock_context *lock, loff_t offset, int whence) { diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c index 69f72ed..e6e7cbf 100644 --- a/fs/nfs/nfs42xdr.c +++ b/fs/nfs/nfs42xdr.c @@ -29,6 +29,16 @@ #define encode_offload_cancel_maxsz (op_encode_hdr_maxsz + \ XDR_QUADLEN(NFS4_STATEID_SIZE)) #define decode_offload_cancel_maxsz (op_decode_hdr_maxsz) +#define encode_copy_notify_maxsz (op_encode_hdr_maxsz + \ + XDR_QUADLEN(NFS4_STATEID_SIZE) + \ + 1 + /* nl4_type */ \ + 1 + XDR_QUADLEN(NFS4_OPAQUE_LIMIT)) +#define decode_copy_notify_maxsz (op_decode_hdr_maxsz + \ + 3 + /* cnr_lease_time */\ + XDR_QUADLEN(NFS4_STATEID_SIZE) + \ + 1 + /* Support 1 cnr_source_server */\ + 1 + /* nl4_type */ \ + 1 + XDR_QUADLEN(NFS4_OPAQUE_LIMIT)) #define encode_deallocate_maxsz (op_encode_hdr_maxsz + \ encode_fallocate_maxsz) #define decode_deallocate_maxsz (op_decode_hdr_maxsz) @@ -84,6 +94,12 @@ #define NFS4_dec_offload_cancel_sz (compound_decode_hdr_maxsz + \ decode_putfh_maxsz + \ decode_offload_cancel_maxsz) +#define NFS4_enc_copy_notify_sz (compound_encode_hdr_maxsz + \ + encode_putfh_maxsz + \ + encode_copy_notify_maxsz) +#define NFS4_dec_copy_notify_sz (compound_decode_hdr_maxsz + \ + decode_putfh_maxsz + \ + decode_copy_notify_maxsz) #define NFS4_enc_deallocate_sz (compound_encode_hdr_maxsz + \ encode_putfh_maxsz + \ encode_deallocate_maxsz + \ @@ -137,6 +153,25 @@ static void encode_allocate(struct xdr_stream *xdr, encode_fallocate(xdr, args); } +static void encode_nl4_server(struct xdr_stream *xdr, const struct nl4_server *ns) +{ + encode_uint32(xdr, ns->nl4_type); + switch (ns->nl4_type) { + case NL4_NAME: + case NL4_URL: + encode_string(xdr, ns->u.nl4_str_sz, ns->u.nl4_str); + break; + case NL4_NETADDR: + encode_string(xdr, ns->u.nl4_addr.netid_len, + ns->u.nl4_addr.netid); + encode_string(xdr, ns->u.nl4_addr.addr_len, + ns->u.nl4_addr.addr); + break; + default: + WARN_ON_ONCE(1); + } +} + static void encode_copy(struct xdr_stream *xdr, const struct nfs42_copy_args *args, struct compound_hdr *hdr) @@ -162,6 +197,15 @@ static void encode_offload_cancel(struct xdr_stream *xdr, encode_nfs4_stateid(xdr, &args->osa_stateid); } +static void encode_copy_notify(struct xdr_stream *xdr, + const struct nfs42_copy_notify_args *args, + struct compound_hdr *hdr) +{ + encode_op_hdr(xdr, OP_COPY_NOTIFY, decode_copy_notify_maxsz, hdr); + encode_nfs4_stateid(xdr, &args->cna_src_stateid); + encode_nl4_server(xdr, &args->cna_dst); +} + static void encode_deallocate(struct xdr_stream *xdr, const struct nfs42_falloc_args *args, struct compound_hdr *hdr) @@ -298,6 +342,25 @@ static void nfs4_xdr_enc_offload_cancel(struct rpc_rqst *req, } /* + * Encode COPY_NOTIFY request + */ +static void nfs4_xdr_enc_copy_notify(struct rpc_rqst *req, + struct xdr_stream *xdr, + const void *data) +{ + const struct nfs42_copy_notify_args *args = data; + struct compound_hdr hdr = { + .minorversion = nfs4_xdr_minorversion(&args->cna_seq_args), + }; + + encode_compound_hdr(xdr, req, &hdr); + encode_sequence(xdr, &args->cna_seq_args, &hdr); + encode_putfh(xdr, args->cna_src_fh, &hdr); + encode_copy_notify(xdr, args, &hdr); + encode_nops(&hdr); +} + +/* * Encode DEALLOCATE request */ static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req, @@ -416,6 +479,58 @@ static int decode_write_response(struct xdr_stream *xdr, return -EIO; } +static int decode_nl4_server(struct xdr_stream *xdr, struct nl4_server *ns) +{ + struct nfs42_netaddr *naddr; + uint32_t dummy; + char *dummy_str; + __be32 *p; + int status; + + /* nl_type */ + p = xdr_inline_decode(xdr, 4); + if (unlikely(!p)) + return -EIO; + ns->nl4_type = be32_to_cpup(p); + switch (ns->nl4_type) { + case NL4_NAME: + case NL4_URL: + status = decode_opaque_inline(xdr, &dummy, &dummy_str); + if (unlikely(status)) + return status; + if (unlikely(dummy > NFS4_OPAQUE_LIMIT)) + return -EIO; + memcpy(&ns->u.nl4_str, dummy_str, dummy); + ns->u.nl4_str_sz = dummy; + break; + case NL4_NETADDR: + naddr = &ns->u.nl4_addr; + + /* netid string */ + status = decode_opaque_inline(xdr, &dummy, &dummy_str); + if (unlikely(status)) + return status; + if (unlikely(dummy > RPCBIND_MAXNETIDLEN)) + return -EIO; + naddr->netid_len = dummy; + memcpy(naddr->netid, dummy_str, naddr->netid_len); + + /* uaddr string */ + status = decode_opaque_inline(xdr, &dummy, &dummy_str); + if (unlikely(status)) + return status; + if (unlikely(dummy > RPCBIND_MAXUADDRLEN)) + return -EIO; + naddr->addr_len = dummy; + memcpy(naddr->addr, dummy_str, naddr->addr_len); + break; + default: + WARN_ON_ONCE(1); + return -EIO; + } + return 0; +} + static int decode_copy_requirements(struct xdr_stream *xdr, struct nfs42_copy_res *res) { __be32 *p; @@ -458,6 +573,46 @@ static int decode_offload_cancel(struct xdr_stream *xdr, return decode_op_hdr(xdr, OP_OFFLOAD_CANCEL); } +static int decode_copy_notify(struct xdr_stream *xdr, + struct nfs42_copy_notify_res *res) +{ + __be32 *p; + int status, count; + + status = decode_op_hdr(xdr, OP_COPY_NOTIFY); + if (status) + return status; + /* cnr_lease_time */ + p = xdr_inline_decode(xdr, 12); + if (unlikely(!p)) + goto out_overflow; + p = xdr_decode_hyper(p, &res->cnr_lease_time.seconds); + res->cnr_lease_time.nseconds = be32_to_cpup(p); + + status = decode_opaque_fixed(xdr, &res->cnr_stateid, NFS4_STATEID_SIZE); + if (unlikely(status)) + goto out_overflow; + + /* number of source addresses */ + p = xdr_inline_decode(xdr, 4); + if (unlikely(!p)) + goto out_overflow; + + count = be32_to_cpup(p); + if (count > 1) + pr_warn("NFS: %s: nsvr %d > Supported. Use first servers\n", + __func__, count); + + status = decode_nl4_server(xdr, &res->cnr_src); + if (unlikely(status)) + goto out_overflow; + return 0; + +out_overflow: + print_overflow_msg(__func__, xdr); + return -EIO; +} + static int decode_deallocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res) { return decode_op_hdr(xdr, OP_DEALLOCATE); @@ -585,6 +740,32 @@ static int nfs4_xdr_dec_offload_cancel(struct rpc_rqst *rqstp, } /* + * Decode COPY_NOTIFY response + */ +static int nfs4_xdr_dec_copy_notify(struct rpc_rqst *rqstp, + struct xdr_stream *xdr, + void *data) +{ + struct nfs42_copy_notify_res *res = data; + struct compound_hdr hdr; + int status; + + status = decode_compound_hdr(xdr, &hdr); + if (status) + goto out; + status = decode_sequence(xdr, &res->cnr_seq_res, rqstp); + if (status) + goto out; + status = decode_putfh(xdr); + if (status) + goto out; + status = decode_copy_notify(xdr, res); + +out: + return status; +} + +/* * Decode DEALLOCATE request */ static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp, diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 8d59c96..7d17b31 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h @@ -460,6 +460,8 @@ int nfs41_discover_server_trunking(struct nfs_client *clp, struct nfs_client **, struct rpc_cred *); extern void nfs4_schedule_session_recovery(struct nfs4_session *, int); extern void nfs41_notify_server(struct nfs_client *); +bool nfs4_check_serverowner_major_id(struct nfs41_server_owner *o1, + struct nfs41_server_owner *o2); #else static inline void nfs4_schedule_session_recovery(struct nfs4_session *session, int err) { diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index 8f53455..ac00eb8 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -625,7 +625,7 @@ int nfs40_walk_client_list(struct nfs_client *new, /* * Returns true if the server major ids match */ -static bool +bool nfs4_check_serverowner_major_id(struct nfs41_server_owner *o1, struct nfs41_server_owner *o2) { diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index 7838bdf..beda4b3 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -133,6 +133,7 @@ static ssize_t nfs4_copy_file_range(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, size_t count, unsigned int flags) { + struct nfs42_copy_notify_res *cn_resp = NULL; ssize_t ret; if (pos_in >= i_size_read(file_inode(file_in))) @@ -144,7 +145,20 @@ static ssize_t nfs4_copy_file_range(struct file *file_in, loff_t pos_in, if (file_inode(file_in) == file_inode(file_out)) return -EINVAL; retry: + if (!nfs42_files_from_same_server(file_in, file_out)) { + cn_resp = kzalloc(sizeof(struct nfs42_copy_notify_res), + GFP_NOFS); + if (unlikely(cn_resp == NULL)) + return -ENOMEM; + + ret = nfs42_proc_copy_notify(file_in, file_out, cn_resp); + if (ret) + goto out; + } + ret = nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count); +out: + kfree(cn_resp); if (ret == -EAGAIN) goto retry; return ret; diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index db84b4a..fec6e6b 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -9692,6 +9692,7 @@ static bool nfs4_match_stateid(const nfs4_stateid *s1, | NFS_CAP_ALLOCATE | NFS_CAP_COPY | NFS_CAP_OFFLOAD_CANCEL + | NFS_CAP_COPY_NOTIFY | NFS_CAP_DEALLOCATE | NFS_CAP_SEEK | NFS_CAP_LAYOUTSTATS diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index b7bde12..2163900 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -7790,6 +7790,7 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry, PROC42(CLONE, enc_clone, dec_clone), PROC42(COPY, enc_copy, dec_copy), PROC42(OFFLOAD_CANCEL, enc_offload_cancel, dec_offload_cancel), + PROC42(COPY_NOTIFY, enc_copy_notify, dec_copy_notify), PROC(LOOKUPP, enc_lookupp, dec_lookupp), }; diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index 4803507..9e49a6c 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h @@ -537,6 +537,7 @@ enum { NFSPROC4_CLNT_CLONE, NFSPROC4_CLNT_COPY, NFSPROC4_CLNT_OFFLOAD_CANCEL, + NFSPROC4_CLNT_COPY_NOTIFY, NFSPROC4_CLNT_LOOKUPP, }; diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 0fc0b91..e5d89ff 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -261,5 +261,6 @@ struct nfs_server { #define NFS_CAP_CLONE (1U << 23) #define NFS_CAP_COPY (1U << 24) #define NFS_CAP_OFFLOAD_CANCEL (1U << 25) +#define NFS_CAP_COPY_NOTIFY (1U << 26) #endif diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 0e01625..dfc59bc 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -1428,6 +1428,22 @@ struct nfs42_offload_status_res { int osr_status; }; +struct nfs42_copy_notify_args { + struct nfs4_sequence_args cna_seq_args; + + struct nfs_fh *cna_src_fh; + nfs4_stateid cna_src_stateid; + struct nl4_server cna_dst; +}; + +struct nfs42_copy_notify_res { + struct nfs4_sequence_res cnr_seq_res; + + struct nfstime4 cnr_lease_time; + nfs4_stateid cnr_stateid; + struct nl4_server cnr_src; +}; + struct nfs42_seek_args { struct nfs4_sequence_args seq_args; From patchwork Mon Oct 29 17:40:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990459 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NHIwSPE7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMv1Rmdz9s3q for ; Tue, 30 Oct 2018 04:41:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728062AbeJ3Cau (ORCPT ); Mon, 29 Oct 2018 22:30:50 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:32791 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728046AbeJ3Cau (ORCPT ); Mon, 29 Oct 2018 22:30:50 -0400 Received: by mail-qk1-f194.google.com with SMTP id o89so5481374qko.0; Mon, 29 Oct 2018 10:41:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=L/lyESnrT7eI5UkekwLVWgapYd9jVCBDfyygHzXaoSk=; b=NHIwSPE7H6nRouX+eaGYasksKeXAaZDMypLlNzso/ALJ4zA7db/Mp5QyyEJ3JKW1nR +ykFckEsrQb7gOy/lt6XYDG6sEwdRVxn62HVXY3lm/aQ78XJdeCnrhD6OUQkXTSvR5pu IU7deAykx9edJxkoR4JSNatAKLldqsn9SXlLE97XlVKDDB+23pIRtmJqYpqMFuadgS+j /HRhS59VO2HvlAFWnrLkeeMMVPdAOuHIOm0l1I+0nKDRHtQvEPXIBFcMXFZpjOnwJ0u8 BXS2Q8xv3F3cvHgjqkX23EgAs1pwpDr7SvvA5l8ABtG4tOYvLjWQWwXyUZvpUTPu6nob 0M8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=L/lyESnrT7eI5UkekwLVWgapYd9jVCBDfyygHzXaoSk=; b=iOMzD3wYfF3Qi1WTcjr7oKFs2zdhKkQVgg0TMMKYcoQRlJsf21gAhaBoCbm9FRbCJR vi1vfK5UvuGAP+Ls+SmEqOGb4xygKY4y5BhFAeMIB784KxIIdzGDJyO2ywv/EzLfHGCQ ZLas4QokJ1Aky1flwq+7y4ESp4XuIyWO2Kt0TyXvDEbkIwyQB7zxJquhE+vElPYijnf/ zz2kL7pJbBQE9juXbzv9osD/4t+nXs1junYh3RYjEACz4IoKRh7vWglhxw7x/gevRFj8 Fh7JLffXSQOZyQN0t9wBpq40/U7Sqev73Mbkm/smntpvn7ozSU6/FwYiplXjw+6T/AQR +DfQ== X-Gm-Message-State: AGRZ1gI7VQRAVhe7BUC7E0pquXxtk4vZ+7oKLhRAFRyvHZut8B8hmhe5 7W5EQ0OIyKBEHVPCa9jX8WY= X-Google-Smtp-Source: AJdET5cWTJd/XCiauEvbGUhLCdK45gguEY0AIrqAG65lIponlSoN/RNbxWfzLyst+smMiaJocTyGxw== X-Received: by 2002:a37:3ac5:: with SMTP id h188mr10900373qka.232.1540834872461; Mon, 29 Oct 2018 10:41:12 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.10 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:11 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 06/12] NFS: add ca_source_server<> to COPY Date: Mon, 29 Oct 2018 13:40:53 -0400 Message-Id: <20181029174059.38326-8-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia Support only one source server address: the same address that the client and source server use. Signed-off-by: Andy Adamson Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs42.h | 3 ++- fs/nfs/nfs42proc.c | 26 +++++++++++++++++--------- fs/nfs/nfs42xdr.c | 12 ++++++++++-- fs/nfs/nfs4file.c | 7 ++++++- include/linux/nfs_xdr.h | 1 + 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/fs/nfs/nfs42.h b/fs/nfs/nfs42.h index bbe49a3..28dcee5 100644 --- a/fs/nfs/nfs42.h +++ b/fs/nfs/nfs42.h @@ -15,7 +15,8 @@ /* nfs4.2proc.c */ #ifdef CONFIG_NFS_V4_2 int nfs42_proc_allocate(struct file *, loff_t, loff_t); -ssize_t nfs42_proc_copy(struct file *, loff_t, struct file *, loff_t, size_t); +ssize_t nfs42_proc_copy(struct file *, loff_t, struct file *, loff_t, size_t, + struct nl4_server *, nfs4_stateid *); int nfs42_proc_deallocate(struct file *, loff_t, loff_t); loff_t nfs42_proc_llseek(struct file *, loff_t, int); int nfs42_proc_layoutstats_generic(struct nfs_server *, diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index b1c57a4..bb9e799 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -242,7 +242,9 @@ static ssize_t _nfs42_proc_copy(struct file *src, struct file *dst, struct nfs_lock_context *dst_lock, struct nfs42_copy_args *args, - struct nfs42_copy_res *res) + struct nfs42_copy_res *res, + struct nl4_server *nss, + nfs4_stateid *cnr_stateid) { struct rpc_message msg = { .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_COPY], @@ -256,11 +258,15 @@ static ssize_t _nfs42_proc_copy(struct file *src, size_t count = args->count; ssize_t status; - status = nfs4_set_rw_stateid(&args->src_stateid, src_lock->open_context, - src_lock, FMODE_READ); - if (status) - return status; - + if (nss) { + args->cp_src = nss; + nfs4_stateid_copy(&args->src_stateid, cnr_stateid); + } else { + status = nfs4_set_rw_stateid(&args->src_stateid, + src_lock->open_context, src_lock, FMODE_READ); + if (status) + return status; + } status = nfs_filemap_write_and_wait_range(file_inode(src)->i_mapping, pos_src, pos_src + (loff_t)count - 1); if (status) @@ -324,8 +330,9 @@ static ssize_t _nfs42_proc_copy(struct file *src, } ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src, - struct file *dst, loff_t pos_dst, - size_t count) + struct file *dst, loff_t pos_dst, size_t count, + struct nl4_server *nss, + nfs4_stateid *cnr_stateid) { struct nfs_server *server = NFS_SERVER(file_inode(dst)); struct nfs_lock_context *src_lock; @@ -370,7 +377,8 @@ ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src, inode_lock(file_inode(dst)); err = _nfs42_proc_copy(src, src_lock, dst, dst_lock, - &args, &res); + &args, &res, + nss, cnr_stateid); inode_unlock(file_inode(dst)); if (err >= 0) diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c index e6e7cbf..c96c3f8 100644 --- a/fs/nfs/nfs42xdr.c +++ b/fs/nfs/nfs42xdr.c @@ -21,7 +21,10 @@ #define encode_copy_maxsz (op_encode_hdr_maxsz + \ XDR_QUADLEN(NFS4_STATEID_SIZE) + \ XDR_QUADLEN(NFS4_STATEID_SIZE) + \ - 2 + 2 + 2 + 1 + 1 + 1) + 2 + 2 + 2 + 1 + 1 + 1 +\ + 1 + /* One cnr_source_server */\ + 1 + /* nl4_type */ \ + 1 + XDR_QUADLEN(NFS4_OPAQUE_LIMIT)) #define decode_copy_maxsz (op_decode_hdr_maxsz + \ NFS42_WRITE_RES_SIZE + \ 1 /* cr_consecutive */ + \ @@ -186,7 +189,12 @@ static void encode_copy(struct xdr_stream *xdr, encode_uint32(xdr, 1); /* consecutive = true */ encode_uint32(xdr, args->sync); - encode_uint32(xdr, 0); /* src server list */ + if (args->cp_src == NULL) { /* intra-ssc */ + encode_uint32(xdr, 0); /* no src server list */ + return; + } + encode_uint32(xdr, 1); /* supporting 1 server */ + encode_nl4_server(xdr, args->cp_src); } static void encode_offload_cancel(struct xdr_stream *xdr, diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index beda4b3..e5c1a68 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -134,6 +134,8 @@ static ssize_t nfs4_copy_file_range(struct file *file_in, loff_t pos_in, size_t count, unsigned int flags) { struct nfs42_copy_notify_res *cn_resp = NULL; + struct nl4_server *nss = NULL; + nfs4_stateid *cnrs = NULL; ssize_t ret; if (pos_in >= i_size_read(file_inode(file_in))) @@ -154,9 +156,12 @@ static ssize_t nfs4_copy_file_range(struct file *file_in, loff_t pos_in, ret = nfs42_proc_copy_notify(file_in, file_out, cn_resp); if (ret) goto out; + nss = &cn_resp->cnr_src; + cnrs = &cn_resp->cnr_stateid; } - ret = nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count); + ret = nfs42_proc_copy(file_in, pos_in, file_out, pos_out, count, nss, + cnrs); out: kfree(cn_resp); if (ret == -EAGAIN) diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index dfc59bc..3a40b17 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -1400,6 +1400,7 @@ struct nfs42_copy_args { u64 count; bool sync; + struct nl4_server *cp_src; }; struct nfs42_write_res { From patchwork Mon Oct 29 17:40:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990460 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="iO16EAq2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMy0frGz9s9m for ; Tue, 30 Oct 2018 04:41:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728046AbeJ3Cav (ORCPT ); Mon, 29 Oct 2018 22:30:51 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:44777 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbeJ3Cav (ORCPT ); Mon, 29 Oct 2018 22:30:51 -0400 Received: by mail-qk1-f196.google.com with SMTP id n12so5450868qkh.11; Mon, 29 Oct 2018 10:41:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DqnHnZrMSvA0or48b6pnWzyYDz4iWYc8+TMTuA2+K94=; b=iO16EAq2S7E91Xfvz1LSANX2tqNBqF8MoSzDlFFR35GPdq/Mvc3O79TnChN8wbpA3G FV7um+XuaFsp5oXe++8xBsfnegv7JlN5HRSpu4flZ4aSHikLS0aEWZBd/C1iLJdeOgw7 hgmNjnSkzG4P9JyJ8eTGgXypf+MRWDHXwHH2OCYVbLcW0DE9rZmjR6opzQZ8BGqtuRXz /9A6qVqfv3lZlmAADwLezzwjjObS+l1lH2R1LUh03ArA/Jtw8jI9Rp4lZKYbt9UBPf/R gSnq8CklBX0A+kvZLYX20Gf0e45dZrE6/m0LRfGdOSrQT1YiJKpFegRl/KcPhzUmSIl5 S4og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DqnHnZrMSvA0or48b6pnWzyYDz4iWYc8+TMTuA2+K94=; b=sXF1LmrhFuUuIz1ZL0AB5f8JOL6bBLa66Bgut2FOllKUGnVd0gGyWB3s7hOhrqnHCf o7U0su7Hin7ePYQEHRV43Xah0AmFC8gePU0T2Md+JlWpWy0FSCPycTgksviBTdyKVu2j F41olLBGTnOuJnG6nKYApYmpg2kQCb1HGlbLI7TxC/qqWdX4iNcNHifcXZsA5RCd73Zh Q0Pa0Zdcgj2ZnKs2tk9UuoP/NlYCBypSqyfl12xJYB/LbeGGilxJ5CXekUyQZWx1ROhC 2EcZONn8WzyoA7MOBTY0Rd0xHX6URK/y5GYtXu6tRBlJkaPvgbfIQ+3I2WYF37puQkHc eEnQ== X-Gm-Message-State: AGRZ1gKcBgTqxy4X6kYT/N1C2hThtQJsEns2zW1bC9ce3J++6UwebxFT KD9Tkcka5P58/1BSCkN7ucg= X-Google-Smtp-Source: AJdET5fLJjUJmGOLPCRByX/hJz2+Y4l5MrziZgizEnsBxSPnJmLlIG71509QUz2ksx3bEc21MoSBug== X-Received: by 2002:a37:c68c:: with SMTP id s12mr13295318qkl.66.1540834873886; Mon, 29 Oct 2018 10:41:13 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.12 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:13 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 07/12] NFS: also send OFFLOAD_CANCEL to source server Date: Mon, 29 Oct 2018 13:40:54 -0400 Message-Id: <20181029174059.38326-9-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia In case of copy is cancelled, also send OFFLOAD_CANCEL to the source server. Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs42proc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index bb9e799..98fe00b 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -205,12 +205,14 @@ static int handle_async_copy(struct nfs42_copy_res *res, memcpy(&res->write_res.verifier, ©->verf, sizeof(copy->verf)); status = -copy->error; +out_free: kfree(copy); return status; out_cancel: nfs42_do_offload_cancel_async(dst, ©->stateid); - kfree(copy); - return status; + if (!nfs42_files_from_same_server(src, dst)) + nfs42_do_offload_cancel_async(src, src_stateid); + goto out_free; } static int process_copy_commit(struct file *dst, loff_t pos_dst, From patchwork Mon Oct 29 17:40:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990461 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="cDq2wNUo"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMMy5s51z9sBj for ; Tue, 30 Oct 2018 04:41:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728101AbeJ3Cax (ORCPT ); Mon, 29 Oct 2018 22:30:53 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:42840 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbeJ3Cax (ORCPT ); Mon, 29 Oct 2018 22:30:53 -0400 Received: by mail-qk1-f194.google.com with SMTP id u68so1509252qkg.9; Mon, 29 Oct 2018 10:41:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qWc4e/0MmfBIIgJWWnXm9U9/kkhvubDK4oN4lTXjqm4=; b=cDq2wNUomZKfqnxrqq3JuBCzIpBhFFrEs+Mvn9dcO9KF4Ho1AmhxedNh5rowmmCc5C 28dRR0XbVIdzlKnu1KkVwdgwdxttWM85sSIgCjiprJJwZ5qyin3FrjKi/DArrkYhHlcH Nm2i0ru1+0156Sg+cdgSkkyctASgGztGx5nwrDyHJd6XGOHYUBN0rqwlhq48oDgq3auD M6eL1NPz+lEba7HkyzS5cTubrLOJAQT6eWavmyUQeLbQM9+kWwKWDilQ+CmYbjMhv3ID J1WAFBM6kGXR+Tvvf50wQ/SVUI2RXVqgIrprIghfJXtn3UVvK5frHiL0QOHmbx+BBjjr SbOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qWc4e/0MmfBIIgJWWnXm9U9/kkhvubDK4oN4lTXjqm4=; b=PWZU7SluLefD6ahD7Gdd8i9GKeOQ+0g8QMy5CidcP6LjF426iLl5VPSGnyvrtzHLu1 f9AxUJxyAWG+Lzf+yY5fxBGLlVjBrJn3GpRGA2Jd25mUnh1EzMTDaEzKfPYodx91fzot zMZMyC1xrJDb9chUVJ7HOuaRxU/0/FQ9ZgLtPXV4jrOmMQY1X8ETHTPUfZfgZZAXOa56 n/EkoZaP4Bt55W+3RRIzS8VB9uopay6M2iYXxqk+vdg0w1s9/8nGi5OeBViQJ+D5PCGw dj1sLjTA5YNV45uyDAzJGVlLBAEFPPMvSKxPo6bzhcmiG/e4yuv8tDulyibTxOkOTrUE 2AQA== X-Gm-Message-State: AGRZ1gKrvMRA09ZZU4BIOBr/ymQuDxYkXDbMXdQS3ZHqiiUuu8vriWQj xWhBOQ1FUvvospXKa0zYYWA= X-Google-Smtp-Source: AJdET5cQmlWWq1FZtfa+eYWTJJagfenJPBs7kBFyWWTnEdMibTH2w1OQTWcmtPAXpzNCR64aIqjpGA== X-Received: by 2002:a37:5288:: with SMTP id g130-v6mr13606490qkb.124.1540834875876; Mon, 29 Oct 2018 10:41:15 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.13 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:14 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 08/12] NFS: inter ssc open Date: Mon, 29 Oct 2018 13:40:55 -0400 Message-Id: <20181029174059.38326-10-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia NFSv4.2 inter server to server copy requires the destination server to READ the data from the source server using the provided stateid and file handle. Given an NFSv4 stateid and filehandle from the COPY operaion, provide the destination server with an NFS client function to create a struct file suitable for the destiniation server to READ the data to be copied. Signed-off-by: Olga Kornievskaia Signed-off-by: Andy Adamson --- fs/nfs/nfs4_fs.h | 7 +++++ fs/nfs/nfs4file.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ fs/nfs/nfs4proc.c | 5 ++- 3 files changed, 103 insertions(+), 3 deletions(-) diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 7d17b31..9c566a4 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h @@ -307,6 +307,13 @@ extern int nfs4_set_rw_stateid(nfs4_stateid *stateid, const struct nfs_open_context *ctx, const struct nfs_lock_context *l_ctx, fmode_t fmode); +extern int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, + struct nfs_fattr *fattr, struct nfs4_label *label, + struct inode *inode); +extern int update_open_stateid(struct nfs4_state *state, + const nfs4_stateid *open_stateid, + const nfs4_stateid *deleg_stateid, + fmode_t fmode); #if defined(CONFIG_NFS_V4_1) extern int nfs41_sequence_done(struct rpc_task *, struct nfs4_sequence_res *); diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index e5c1a68..0b1dcf9 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "delegation.h" #include "internal.h" #include "iostat.h" @@ -267,6 +268,99 @@ static int nfs42_clone_file_range(struct file *src_file, loff_t src_off, out: return ret; } + +static int read_name_gen = 1; +#define SSC_READ_NAME_BODY "ssc_read_%d" + +struct file * +nfs42_ssc_open(struct vfsmount *ss_mnt, struct nfs_fh *src_fh, + nfs4_stateid *stateid) +{ + struct nfs_fattr fattr; + struct file *filep, *res; + struct nfs_server *server; + struct inode *r_ino = NULL; + struct nfs_open_context *ctx; + struct nfs4_state_owner *sp; + char *read_name; + int len, status = 0; + + server = NFS_SERVER(ss_mnt->mnt_root->d_inode); + + nfs_fattr_init(&fattr); + + status = nfs4_proc_getattr(server, src_fh, &fattr, NULL, NULL); + if (status < 0) { + res = ERR_PTR(status); + goto out; + } + + res = ERR_PTR(-ENOMEM); + len = strlen(SSC_READ_NAME_BODY) + 16; + read_name = kzalloc(len, GFP_NOFS); + if (read_name == NULL) + goto out; + snprintf(read_name, len, SSC_READ_NAME_BODY, read_name_gen++); + + r_ino = nfs_fhget(ss_mnt->mnt_root->d_inode->i_sb, src_fh, &fattr, + NULL); + if (IS_ERR(r_ino)) { + res = ERR_CAST(r_ino); + goto out; + } + + filep = alloc_file_pseudo(r_ino, ss_mnt, read_name, FMODE_READ, + r_ino->i_fop); + if (IS_ERR(filep)) { + res = ERR_CAST(filep); + goto out; + } + filep->f_mode |= FMODE_READ; + + ctx = alloc_nfs_open_context(filep->f_path.dentry, filep->f_mode, + filep); + if (IS_ERR(ctx)) { + res = ERR_CAST(ctx); + goto out_filep; + } + + res = ERR_PTR(-EINVAL); + sp = nfs4_get_state_owner(server, ctx->cred, GFP_KERNEL); + if (sp == NULL) + goto out_ctx; + + ctx->state = nfs4_get_open_state(r_ino, sp); + if (ctx->state == NULL) + goto out_stateowner; + + set_bit(NFS_OPEN_STATE, &ctx->state->flags); + memcpy(&ctx->state->open_stateid.other, &stateid->other, + NFS4_STATEID_OTHER_SIZE); + update_open_stateid(ctx->state, stateid, NULL, filep->f_mode); + + nfs_file_set_open_context(filep, ctx); + put_nfs_open_context(ctx); + + file_ra_state_init(&filep->f_ra, filep->f_mapping->host->i_mapping); + res = filep; +out: + return res; +out_stateowner: + nfs4_put_state_owner(sp); +out_ctx: + put_nfs_open_context(ctx); +out_filep: + fput(filep); + goto out; +} +EXPORT_SYMBOL_GPL(nfs42_ssc_open); +void nfs42_ssc_close(struct file *filep) +{ + struct nfs_open_context *ctx = nfs_file_open_context(filep); + + ctx->state->flags = 0; +} +EXPORT_SYMBOL_GPL(nfs42_ssc_close); #endif /* CONFIG_NFS_V4_2 */ const struct file_operations nfs4_file_operations = { diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index fec6e6b..e5178b2f 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -91,7 +91,6 @@ static int _nfs4_recover_proc_open(struct nfs4_opendata *data); static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *); static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr); -static int nfs4_proc_getattr(struct nfs_server *, struct nfs_fh *, struct nfs_fattr *, struct nfs4_label *label, struct inode *inode); static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, struct nfs_fattr *fattr, struct nfs4_label *label, struct inode *inode); static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred, struct nfs_fattr *fattr, struct iattr *sattr, @@ -1653,7 +1652,7 @@ static void nfs_state_clear_delegation(struct nfs4_state *state) write_sequnlock(&state->seqlock); } -static int update_open_stateid(struct nfs4_state *state, +int update_open_stateid(struct nfs4_state *state, const nfs4_stateid *open_stateid, const nfs4_stateid *delegation, fmode_t fmode) @@ -3936,7 +3935,7 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, return nfs4_call_sync(server->client, server, &msg, &args.seq_args, &res.seq_res, 0); } -static int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, +int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle, struct nfs_fattr *fattr, struct nfs4_label *label, struct inode *inode) { From patchwork Mon Oct 29 17:40:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990462 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="B5XFtVXG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMN05Dv9z9s2P for ; Tue, 30 Oct 2018 04:41:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728110AbeJ3Caz (ORCPT ); Mon, 29 Oct 2018 22:30:55 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:44783 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbeJ3Cay (ORCPT ); Mon, 29 Oct 2018 22:30:54 -0400 Received: by mail-qk1-f194.google.com with SMTP id n12so5451026qkh.11; Mon, 29 Oct 2018 10:41:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4PksShieLrh4Cf0smwQQ0hWXC8t13fGxowZ1fcGZ/Dw=; b=B5XFtVXGV8sUhpMihOc21WdIyMlot5CKoCJDneZChSnI+V9pfHXWrV9apRl/IGAEbF L37LwSS05B3Wy/fnzsR0J2sLhg61e4s5Vgnjhxk3gVme4Hk4ekBDdwjqmAaq3ZD3tcHP a7HjVCwE9JV7/kAEv69GEU4GInlbCf2ejcnB5jxbJzoTA/srSjMW9uTcSSFZhsJbXs9P SF+jGlE9je6cUyDTUKWHcv3gZr5NwFEWASnaFpqvT0ajw+3L594gfl3uGy7jaqr/f/YO uEcMDD2lB518SmmsUNWcMtu1bqI1hBWIMly91gu4kyEupAXM56/sc5hDYDDRIYk9kBp5 qJfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4PksShieLrh4Cf0smwQQ0hWXC8t13fGxowZ1fcGZ/Dw=; b=as5dORLGev/Lz5ffsmTE1Yv0axklMf4HUgTgMT2U60tBOE9yDWnJ+WNQfC0eyEyuZ7 clZiAx/f6ncccbdRwMEGiaxpFRjEs3/qciz3ggk9Gv6Yc6wbOtEWqF9GfW6mIBVkv+Qh yWmnKG9NKUJx9QX57hR6YWzmLZmI/ZntVKNJ4LDd65SM/E3YMNZW3/j80Y6+bfbdD8/D aTQ0FHuzD9ZJ9dmFvxRUDfl/tH6KxZzeu/XnUV2uAnn1C0LkD782+z1RTRu39u/bNy5m aq0M+ZkYa8gpbROGiST1HLktr58iL2YQ5Ot7IOG1EeNNql6U8Xe54anflzXqrqTevffk aI/Q== X-Gm-Message-State: AGRZ1gJ3D51h5s7P7Yo2jRY0CalH7VW4OWLPoax6eJ8bcv5B0K6JnRpG fksli+a+A1I05A1WKPTEHBc= X-Google-Smtp-Source: AJdET5fCdbTOLLP62g5x7zPHlxiwxvqjA1AgT2gC3zH3ud6r/+pTYfmD9EJza44DLA0FzH8HRgm9hA== X-Received: by 2002:a37:5906:: with SMTP id n6-v6mr12948710qkb.73.1540834877334; Mon, 29 Oct 2018 10:41:17 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.15 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:16 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 09/12] NFS: skip recovery of copy open on dest server Date: Mon, 29 Oct 2018 13:40:56 -0400 Message-Id: <20181029174059.38326-11-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia Mark the open created for the source file on the destination server. Then if this open is going thru a recovery, then fail the recovery as we don't need to be recoving a "fake" open. We need to fail the ongoing READs and vfs_copy_file_range(). Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs4_fs.h | 1 + fs/nfs/nfs4file.c | 1 + fs/nfs/nfs4state.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+) diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 9c566a4..482754d 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h @@ -165,6 +165,7 @@ enum { NFS_STATE_CHANGE_WAIT, /* A state changing operation is outstanding */ #ifdef CONFIG_NFS_V4_2 NFS_CLNT_DST_SSC_COPY_STATE, /* dst server open state on client*/ + NFS_SRV_SSC_COPY_STATE, /* ssc state on the dst server */ #endif /* CONFIG_NFS_V4_2 */ }; diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index 0b1dcf9..989f174 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -333,6 +333,7 @@ struct file * if (ctx->state == NULL) goto out_stateowner; + set_bit(NFS_SRV_SSC_COPY_STATE, &ctx->state->flags); set_bit(NFS_OPEN_STATE, &ctx->state->flags); memcpy(&ctx->state->open_stateid.other, &stateid->other, NFS4_STATEID_OTHER_SIZE); diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 62ae0fd..b0b82c6 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -1606,6 +1606,9 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs { struct nfs4_state *state; int status = 0; +#ifdef CONFIG_NFS_V4_2 + bool found_ssc_copy_state = false; +#endif /* CONFIG_NFS_V4_2 */ /* Note: we rely on the sp->so_states list being ordered * so that we always reclaim open(O_RDWR) and/or open(O_WRITE) @@ -1625,6 +1628,13 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs continue; if (state->state == 0) continue; +#ifdef CONFIG_NFS_V4_2 + if (test_bit(NFS_SRV_SSC_COPY_STATE, &state->flags)) { + nfs4_state_mark_recovery_failed(state, -EIO); + found_ssc_copy_state = true; + continue; + } +#endif /* CONFIG_NFS_V4_2 */ refcount_inc(&state->count); spin_unlock(&sp->so_lock); status = __nfs4_reclaim_open_state(sp, state, ops); @@ -1671,6 +1681,10 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs } raw_write_seqcount_end(&sp->so_reclaim_seqcount); spin_unlock(&sp->so_lock); +#ifdef CONFIG_NFS_V4_2 + if (found_ssc_copy_state) + return -EIO; +#endif /* CONFIG_NFS_V4_2 */ return 0; out_err: nfs4_put_open_state(state); From patchwork Mon Oct 29 17:40:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990466 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="qgyhtu8P"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMN63Gtfz9s3q for ; Tue, 30 Oct 2018 04:41:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728121AbeJ3Ca5 (ORCPT ); Mon, 29 Oct 2018 22:30:57 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:41527 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727450AbeJ3Ca4 (ORCPT ); Mon, 29 Oct 2018 22:30:56 -0400 Received: by mail-qk1-f195.google.com with SMTP id 189so4053880qkj.8; Mon, 29 Oct 2018 10:41:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7UYm6KwHepkUcFRejYDPg8EOERI1MmALOURzx0oOqU8=; b=qgyhtu8PamjdUrG/T+0w1V0aWD12cqYtobDn8FkkEMikqKxA3RbXe9kqFiv57P+bXo dMjphsINCLaYGP33OpflPBJmOwRVrNT5CTBGq4ZGF72Eu+7F/iEtOwaHqbSw1XkjYc1F 7a7jppLcp+wYwq0hfTyhNoXjkNlgqat/cdDPgY7eb0nablkWK6vpZ7YgspEbLGBvindo jZXTwwSrDIHpvwZMMAq69ZsrDXt0uk3rCWPbZ8Ui+tHCBESD6sC/htSe59P9869Oosqg 2Ds9c5jEwTldWyvI8+bx/zjtV0NVq3iN3mFIWJAexlGRpQuDY9dkHPXYFyCW6RjsEP+I gfIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7UYm6KwHepkUcFRejYDPg8EOERI1MmALOURzx0oOqU8=; b=NgW2Yie+Iok1tt+0PjLAPRr983iIRO0tsdV2eGcaPpERCN1dHd+OyRfCxXyp+PCb7O MEVrLECdUFMJTmdmBVMtlJ+5fT00j18c5n9vDcp4V33bHiS2ArUKJ+5y2R1htBkmBwYE TF3Lvsj8uQHEfj6M8eloaoMxvk99b1pjqs1M+T0zwVzs65NFW9WplIvYFPLWYv5GJekf hFot5ULgRXmZuV05NcdqOsNJvTeoVKAgkAzelWqWhHuHl4ZzeG+eO3VG9Ia14LIpojnR Ki5rIQsNqJD8fdnOB5GbdEDhl9P+gVvngkEH2g5P6iNBajjC8/ljshDzMPH7eG1Oxw7t tnfw== X-Gm-Message-State: AGRZ1gKOz7xzj904STmNszkJWCXQ4lAZ3VPKzoKrgfPBoqA6FTanBPd8 DKoPz3c1kuVNoIqf25nQWOU= X-Google-Smtp-Source: AJdET5fRS+HZGn+1AlOaY9tzlise3p8ou3TMS6YWuwYaQiF1ofBDBpi71sp+KOIdrL4qsn29DoB+DQ== X-Received: by 2002:a37:ba42:: with SMTP id k63-v6mr13205954qkf.103.1540834878906; Mon, 29 Oct 2018 10:41:18 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.17 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:18 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 10/12] NFS: for "inter" copy treat ESTALE as ENOTSUPP Date: Mon, 29 Oct 2018 13:40:57 -0400 Message-Id: <20181029174059.38326-12-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia If the client sends an "inter" copy to the destination server but it only supports "intra" copy, it can return ESTALE (since it doesn't know anything about the file handle from the other server and does not recognize the special case of "inter" copy). Translate this error as ENOTSUPP and also send OFFLOAD_CANCEL to the source server so that it can clean up state. Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs42proc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index 98fe00b..00809b3 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -395,6 +395,11 @@ ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src, args.sync = true; dst_exception.retry = 1; continue; + } else if (err == -ESTALE && + !nfs42_files_from_same_server(src, dst)) { + nfs42_do_offload_cancel_async(src, &args.src_stateid); + err = -EOPNOTSUPP; + break; } err2 = nfs4_handle_exception(server, err, &src_exception); From patchwork Mon Oct 29 17:40:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990463 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LE05cVLr"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMN40Wn8z9s2P for ; Tue, 30 Oct 2018 04:41:24 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728131AbeJ3Ca6 (ORCPT ); Mon, 29 Oct 2018 22:30:58 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:33940 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726330AbeJ3Ca5 (ORCPT ); Mon, 29 Oct 2018 22:30:57 -0400 Received: by mail-qt1-f195.google.com with SMTP id z2-v6so10273678qts.1; Mon, 29 Oct 2018 10:41:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=fwlJnXfUGTRII/SW0YspOWGhfPFdbZ3Rgyeu7Z/VErM=; b=LE05cVLrmi50hLTsHjbNyTGf5u3HgS7+jLOBQ0FG7NsP7CsOpeJLmjpuNgpJ3tajhL Gr2e06fmz/CYv4iTo3ocC90qv/WFQ097Euqp6HGVHrQnh5Xs6zyHgcu30u7vGQNylk/x mteE+Tff2EiRhaMdbemN4tx94y8poqSayp2cPDs3M9EoZBEuR1ghTCbWuvcTKW3Cp0LI JoJagwVx2aZfH3X2BGDMVZiR5GsMJ5eAXQFowYEU6CWhfuslMkvqm2aZWBCmlRBh1Gmk hYTS+t9P4M4+E99GYNXasQJiWAZXvb8JDUt4CZAfA0m050xT+vWLeVVTcuQC9OKL03vL O60w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fwlJnXfUGTRII/SW0YspOWGhfPFdbZ3Rgyeu7Z/VErM=; b=U90SvcHRtvBA5ANofhJ/lMB++G0bfC+FWvRCNpzj0unIH/rdZ6u6mLP2DOHq38xA9n 6s21o2CX4zI/vibNuF/rsb/l/Pb6G40KL2+FEVMJ3xUFFM3EZ4VEhkGwjow3VJkP74/K LfjBSRtkCKb5Uh/59Z4a+hR1VXHgpmHVaJBB5hgAiVS0/q2qla7b3RkMywvzt2FBYPVw ZqQlw+pqifEP7OcF+THnG6P3X2iOLZgRoD8VXiq5tqiAsNWtwPH2/Yj7w+cqNqzM6uDK GRqkfnD/QyL3JyBw2orFPVGJySjrkJ9zd/jOJmIoXmJoqqpHQwN1bzVirLPhCzUXVGco Giiw== X-Gm-Message-State: AGRZ1gJqYUGjRZF6V2xrPNaUy7oBZvTf1tGCWp1G8XmzH9DT6an7MqO/ gYiA48rI4zZJTWuLv+HOEhM= X-Google-Smtp-Source: AJdET5cIOObKO6k+MFIZu6KNCsmcVIlFwF8eQ4ym0TyVJVErZJrdT/LZlzeDk4sG0zq2fRRTyckohw== X-Received: by 2002:ac8:6119:: with SMTP id a25-v6mr13521964qtm.130.1540834880282; Mon, 29 Oct 2018 10:41:20 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.18 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:19 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 11/12] NFS: COPY handle ERR_OFFLOAD_DENIED Date: Mon, 29 Oct 2018 13:40:58 -0400 Message-Id: <20181029174059.38326-13-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia If server sends ERR_OFFLOAD_DENIED error, the client must fall back on doing copy the normal way. Return ENOTSUPP to the vfs and fallback to regular copy. Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs42proc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index 00809b3..c7c2ffa 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -395,7 +395,8 @@ ssize_t nfs42_proc_copy(struct file *src, loff_t pos_src, args.sync = true; dst_exception.retry = 1; continue; - } else if (err == -ESTALE && + } else if ((err == -ESTALE || + err == -NFS4ERR_OFFLOAD_DENIED) && !nfs42_files_from_same_server(src, dst)) { nfs42_do_offload_cancel_async(src, &args.src_stateid); err = -EOPNOTSUPP; From patchwork Mon Oct 29 17:40:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olga Kornievskaia X-Patchwork-Id: 990464 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-cifs-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Ye7eYx1A"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42kMN50bhPz9s3q for ; Tue, 30 Oct 2018 04:41:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728143AbeJ3Ca7 (ORCPT ); Mon, 29 Oct 2018 22:30:59 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:33945 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728129AbeJ3Ca6 (ORCPT ); Mon, 29 Oct 2018 22:30:58 -0400 Received: by mail-qt1-f196.google.com with SMTP id z2-v6so10273762qts.1; Mon, 29 Oct 2018 10:41:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lJ465V0VE4A4er/zz+WqgIGq+JkN4aV47yHUTEvfu9c=; b=Ye7eYx1Au4cdqnNXHvvwHa+1lgk+EnVVJwLEr8erT3gHOuXgTwF77SnQzObuQrx412 R/szSCTUfPonYIBqSIup6UepwImG4tKABhX5QhOYE92a0b1o8rVCKLMvi9Qchl3Pdk+B HscHNA1FL76cB5+qqQg/pYcVRJz7pEC8+i5RWcnxTcNC7321TK50HR+I8YRh8oSs5utZ N8QlUm8D8uEclzofWs4wTiASq3i47zZO21hENmnL+YNBauncr6+CvXdPZW1OcxbYowV/ 4/kwu/XLBHHz9+dDLksuptnd8L9Hx1Kn1MSWf6HRzVPJq3/Q/jLSN2hg205k3zSeXHFj 8SQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=lJ465V0VE4A4er/zz+WqgIGq+JkN4aV47yHUTEvfu9c=; b=eN0x1u7EbPNC3OhBL9rWiAkejroEoTz6Ys6IhSvzUIEp3qxJju+u0mcZjAAEfLm76Q yGwll1pc/tvzbDsc0nOPY/x4YD9ag737mCO9YBAWM1Wsm++DjsPDkI6w6CCptl8VYw9S JpF39/S9I46y50JtNjzrk+hPac+c+2qaXmdWSVsDxpfgKidWzWeiG6ZqbZc0jriHl8Zz h86EIPkboaG77EAn322aDXXn7xXBHujpmFN6zGeXoQtOEXvhYjDFGYBtZkCJZMoG0TnU H/7aYAiD44JgHQ+oZeDPnctxJyCzW1NwDduMZasdYr83oTjYJ7vZIB/6smjMDJRjo2ts 8Kow== X-Gm-Message-State: AGRZ1gJ3/ZwknoWytXXAu8xzevEqx0oAj/BzX76Zs09Jqet05Y3k4ZU9 KqLgsLJ6V0saW5Z4uaZazts= X-Google-Smtp-Source: AJdET5eFCpUGEyckPjYWnyhRWKOxDc75uzQ9Wq6sKZOhIFw5S6OOA7GulYt29Ip3r5r+QpYhQhGmuw== X-Received: by 2002:ac8:2729:: with SMTP id g38-v6mr14148691qtg.168.1540834881642; Mon, 29 Oct 2018 10:41:21 -0700 (PDT) Received: from Olgas-MBP-195.attlocal.net (172-10-226-31.lightspeed.livnmi.sbcglobal.net. [172.10.226.31]) by smtp.gmail.com with ESMTPSA id n190-v6sm13148929qkb.29.2018.10.29.10.41.20 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 29 Oct 2018 10:41:21 -0700 (PDT) From: Olga Kornievskaia To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com, viro@zeniv.linux.org.uk, smfrench@gmail.com, miklos@szeredi.hu Cc: linux-nfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-man@vger.kernel.org Subject: [PATCH v5 12/12] NFS: replace cross device check in copy_file_range Date: Mon, 29 Oct 2018 13:40:59 -0400 Message-Id: <20181029174059.38326-14-olga.kornievskaia@gmail.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: <20181029174059.38326-1-olga.kornievskaia@gmail.com> References: <20181029174059.38326-1-olga.kornievskaia@gmail.com> Sender: linux-cifs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org From: Olga Kornievskaia Add a check to disallow cross file systems copy offload, both files are expected to be of NFS4.2+ type. Reviewed-by: Jeff Layton Reviewed-by: Matthew Wilcox Signed-off-by: Olga Kornievskaia --- fs/nfs/nfs4file.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index 989f174..fde4465 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -138,11 +138,16 @@ static ssize_t nfs4_copy_file_range(struct file *file_in, loff_t pos_in, struct nl4_server *nss = NULL; nfs4_stateid *cnrs = NULL; ssize_t ret; + struct nfs_client *c_in; if (pos_in >= i_size_read(file_inode(file_in))) return -EINVAL; - if (file_inode(file_in)->i_sb != file_inode(file_out)->i_sb) + if (file_in->f_op != &nfs4_file_operations) + return -EXDEV; + + c_in = (NFS_SERVER(file_inode(file_in)))->nfs_client; + if (c_in->cl_minorversion < 2) return -EXDEV; if (file_inode(file_in) == file_inode(file_out))