Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4457520ioa; Wed, 27 Apr 2022 04:25:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwM8+MwzZMlqThCeeGCUI6+x/VJUHT9mNqAm1zVe6oej96MePYAkiyOuS1LZnX3+T0ncYI7 X-Received: by 2002:a17:90a:f3cb:b0:1d9:62d4:25db with SMTP id ha11-20020a17090af3cb00b001d962d425dbmr18959814pjb.222.1651058749747; Wed, 27 Apr 2022 04:25:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651058749; cv=none; d=google.com; s=arc-20160816; b=M7y/5bmyzu87ANjz62Vu2zbXXpqTT+uszVppRq2DVXw6jh81FhQFgPhbSrljJ+DhIy XyydCiFOXOmxizRuMIvR7hjjk88N8IkHkEl5AW2TSrFGqKBNunmVoVmeoxW1TRNV4+1H mjyQ7XEJu8eDVcbFG3uMABCwmIOeXqRKCnKYQeW5WhHM8LURj801g6gP43mPVRqgiT8g FkxaIHgRefuc1nlS/gwqRUnT8w+/BtSaDTtCyr8ThslyaAXOWRpZGEh/01aODs9WbcGq IVrbLh/SMbkNt2V5SfBI2d3ummLerBwr4NBXp39RSe69ad4DLoSTMaba9g0JkKjJWuZY O7Aw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=tQSdHgiSYI5BiggFRvzggWJaDvFhTaxGQfT29ZlYRt4=; b=HKP95DoUvq4fyWfYKRJCE6j10oYuZ2KpekblFiFo/9qgmAx+31ucuDBus2sUieRH8a izI8OLy31PoJFlub/irVK0kAJZPThC05xbPqy7MQrU2ZCnzDmLFapQgoJwSQAxp0KKwa RaiLAKoSkIOZaOxLgLSto3EZs8ThV+os8+0fAttl8xUqgX2Al76MU5PqBIof71ovlW0V jD1+oV0+l/i15UOtSZExAMeHsANtes6bgNMBYcTC92g/TAXYettnTtSXRzDCRYZP/Thj JUIMbZ3miOkGMUVsgo5UzYq136ZOJt7VZz+JtrhtJ1MifLk+t7h/syPaSy5qGzEZ8FpO YrWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=gq8gTiZk; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id ip10-20020a17090b314a00b001c6c8e19f0csi5583473pjb.98.2022.04.27.04.25.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 04:25:49 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=gq8gTiZk; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7B663431D62; Wed, 27 Apr 2022 03:22:28 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354205AbiDZTJL (ORCPT + 99 others); Tue, 26 Apr 2022 15:09:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353834AbiDZTF5 (ORCPT ); Tue, 26 Apr 2022 15:05:57 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BD7D1999DC; Tue, 26 Apr 2022 12:02:49 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id A42D3619CF; Tue, 26 Apr 2022 19:02:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E9D19C385AA; Tue, 26 Apr 2022 19:02:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1650999768; bh=g9pPF97d+RCHJOFXbQh0ZKnmjNdrs3ToH0uMgEVpXfs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gq8gTiZk9B3N/WSCNReKwQcYQUHKWnhObPLG+SgFbe8MzHEg7U6aXi3YOdAliour4 LpCDFfw66pr/zJ72ab8mCMfJEV3KmvhHdIZehB1zps+SUBM8F9k3mC5u2/W/cdSiOs GTZyOwpb4LIEBkTVz0Py6qc6kGRmsUEZk7lKaG/ZMaRONirBMLkLriS2hghhCsNicF 1IsmXF11p0B4IzcOUPezW7090gKVHB7REmhO1UpjNjQ3GEj3/39csYnzVOWrmMMWXD h9kxCIvWx0BJ6noB0//lQLG09ufHpFfvBKYh19z7n2gwYGyXdZ6qZK74GaiisxrXxO gYds21DqpqB5w== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Ronnie Sahlberg , Xiaoli Feng , Steve French , Sasha Levin , sfrench@samba.org, linux-cifs@vger.kernel.org, samba-technical@lists.samba.org Subject: [PATCH AUTOSEL 5.4 4/6] cifs: destage any unwritten data to the server before calling copychunk_write Date: Tue, 26 Apr 2022 15:02:40 -0400 Message-Id: <20220426190243.2351733-4-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220426190243.2351733-1-sashal@kernel.org> References: <20220426190243.2351733-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RDNS_NONE,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ronnie Sahlberg [ Upstream commit f5d0f921ea362636e4a2efb7c38d1ead373a8700 ] because the copychunk_write might cover a region of the file that has not yet been sent to the server and thus fail. A simple way to reproduce this is: truncate -s 0 /mnt/testfile; strace -f -o x -ttT xfs_io -i -f -c 'pwrite 0k 128k' -c 'fcollapse 16k 24k' /mnt/testfile the issue is that the 'pwrite 0k 128k' becomes rearranged on the wire with the 'fcollapse 16k 24k' due to write-back caching. fcollapse is implemented in cifs.ko as a SMB2 IOCTL(COPYCHUNK_WRITE) call and it will fail serverside since the file is still 0b in size serverside until the writes have been destaged. To avoid this we must ensure that we destage any unwritten data to the server before calling COPYCHUNK_WRITE. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1997373 Reported-by: Xiaoli Feng Signed-off-by: Ronnie Sahlberg Signed-off-by: Steve French Signed-off-by: Sasha Levin --- fs/cifs/smb2ops.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c index defee1d208d2..7985fe25850b 100644 --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c @@ -1643,9 +1643,17 @@ smb2_copychunk_range(const unsigned int xid, int chunks_copied = 0; bool chunk_sizes_updated = false; ssize_t bytes_written, total_bytes_written = 0; + struct inode *inode; pcchunk = kmalloc(sizeof(struct copychunk_ioctl), GFP_KERNEL); + /* + * We need to flush all unwritten data before we can send the + * copychunk ioctl to the server. + */ + inode = d_inode(trgtfile->dentry); + filemap_write_and_wait(inode->i_mapping); + if (pcchunk == NULL) return -ENOMEM; -- 2.35.1