Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp4444724ioa; Wed, 27 Apr 2022 04:08:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzVWGsvov6lDCwJ4m7NadvDICxh4Ijr5vm9CpiSDdvM/15WzRVLllFbGjTGDcdOj1mNLGh+ X-Received: by 2002:a17:90a:6389:b0:1c9:ee11:6c2c with SMTP id f9-20020a17090a638900b001c9ee116c2cmr43552529pjj.107.1651057722315; Wed, 27 Apr 2022 04:08:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651057722; cv=none; d=google.com; s=arc-20160816; b=udFDbhqZsN5GyzyEnum2znDjC4Aak+ojpBJSZsd3bpWSo1pKqK7VpsMBrdzBYganrS 83qj6Um34GtbQNaDAtngmDOblR0JjKTk+eggrATK0sxskbkzYKFdRdXCC3HWkZl6517U hcJe+SOJmCOP4PfU/UMllTaRLqfTgQwoY13dyMG+URiTRjlIG5RqM9xzbEiz5GUW39wz Uk9A7K2gGujksv5VgUHS90kOJizlsTEnTnYhuYDM0JAvSaBaqQ3iMVlkBSqSlcckigBC oGrjgYKSXjT45KRft7fzXaZC85LlOths78kGLrqDOchA+e2rcH+plwc1w4YlWGYuktVD C/Ew== 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=y/GQDuyrXGCSHE0iKQW8vx14cyHANWcrQEmrFErK/dE=; b=M+qrNNYsjznl1PrJ8Q64NkaX38g4tTveBtMIWppMaBDEPHRL/wI98QwHJiYFQ/Xm0k iRhFAVtomORHGPZmTXjV+ICCVrg0jOEjQ4MNuXEsLwDZf7cFvTwmHCYPsOLgr7Wgjone bKsiSIzODXCMgbgJGwu3LlL7b+otzR9KIQozbG0t71E4KEdr9ai/wCVVfPSwEMcMmibH JDyhf3SwcmzDRt+o6R/IRFff1PBItk0JcQxTfIOq9fu+eaJ2k4H6B2HGj2YU+v79S3Mv GrVqQ169fpjW4FMXdrXX+n+xoX0iZQ/39ARgPUnUtHUgRRiVEHlySuVDhl94hQvDu0Hd uQ4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Lub7iSDH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 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. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id l6-20020a056a00140600b004fa3a8dff59si1138916pfu.16.2022.04.27.04.08.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Apr 2022 04:08:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Lub7iSDH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 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 061C1AAE38; Wed, 27 Apr 2022 03:03:19 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354030AbiDZTIX (ORCPT + 99 others); Tue, 26 Apr 2022 15:08:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353798AbiDZTFr (ORCPT ); Tue, 26 Apr 2022 15:05:47 -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 C77B61999D4; Tue, 26 Apr 2022 12:02:39 -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 6706C619C0; Tue, 26 Apr 2022 19:02:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B43B0C385C0; Tue, 26 Apr 2022 19:02:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1650999758; bh=Fibnfz6UKMUBj//0u9tJTPvRAWqgcl6ZhEU2wPNikR0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Lub7iSDHdAVPAxBmSK4C7cmvLZyXsWzUfpjEwKPQKyQhZn4yTDCh9eYDFF797i06c i47FV6GLRutgeWfBuHf8r1s2QGuXuMRB3bk2HprZhz5cUMPgCCWjZu5Ek6wrK+SUY3 02o8f76l/7JubbHr/b35QwkKqUIDBaJrT6k1SEKzrsFNn6ivPz7qtVOp9akDRrGLJ6 mTaRjCEeGKdBF6Pa8Zj7Ot0JhFtt2Pg/4wAIPQTsxaeUcOGImvZKmaXRHKRf4c146x WK5j3VcQyeZqQc5YUAb40PIykJv201ecPngq3kXErdr5DTqYm7OIEA2FAhhDSpJcV5 YGLdFP9ia4bpg== 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.10 6/9] cifs: destage any unwritten data to the server before calling copychunk_write Date: Tue, 26 Apr 2022 15:02:27 -0400 Message-Id: <20220426190232.2351606-6-sashal@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220426190232.2351606-1-sashal@kernel.org> References: <20220426190232.2351606-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 0e8f484031da..c758ff41b638 100644 --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c @@ -1744,9 +1744,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