Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp2589142iob; Fri, 6 May 2022 06:21:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz0yUVxjaVd1oDhf7rXZB/wM+VM3O/jCyR0ya9q1IbfWJiFDSQcMxuC2co2Qhr9X0uKLxuU X-Received: by 2002:a17:90b:1b44:b0:1dc:315f:4510 with SMTP id nv4-20020a17090b1b4400b001dc315f4510mr12406870pjb.28.1651843312263; Fri, 06 May 2022 06:21:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651843312; cv=none; d=google.com; s=arc-20160816; b=X6nypA3Ugg0VjxFaFdhk57yAW0YOGOUl89jJtVB2AdExAre9YCxXZORaDWBuylAd1z W/68ZE75D12AAsANEVhrdFe4IwaMEEP63rGcrlkpf1RIgR3u6T6JMdhvESyclbHvGIlQ 2NwiK9XzVW6H6fMuGuV221qoVRJz+wobY9CxS6RDqX9wrSFqzRF/2Q7CciXMAXI2yGfJ JjBBBvKFy05zrpp+0lLrXGnXtaqU4L0AYx7QGBGfrbhHT5V8ofsnAgNk1LucVOfdx7Wd HaLGnr6ZcPN3Cc29mSM5O9sRiIejVmJL33IMIZIsH1AAYgLUm5q9GSf1/g/RwU46zzSy GmBg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=tQSdHgiSYI5BiggFRvzggWJaDvFhTaxGQfT29ZlYRt4=; b=CJKr7qs2Sn4wKMON4YJ6qzQ4n9/4OYwBWqL1wCSIaM+5+c0N7zESG5hy0pb0HHCcto G21BWQ4jQjSNX7uGQDGuQN6WadRooZsiia35moe4b8XWPfZsdLeWN5Zfx2os+i9CoUos 3tUlEoVudwvNXMEzYfpx+aPUGHvBi7NhyBZBoFzzQ7IMkRuNQvmlevkaFajp2U1lD3hy YWO5iFtTg0dHb2muVi1AEFnuqsNSzW5l03gDdL8AhqxT3rWdRiFwYXXhOpKMoSBay/tq MIjcfjQuM6pK7Yan2CaK2MgutApeSWjJnMTGZZn2qkn5C7ZrTLEhZdA0BarjP6M6fvei cfqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=FzgrRMhu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i7-20020a170902cf0700b0015bfd115dcesi2164435plg.455.2022.05.06.06.21.31; Fri, 06 May 2022 06:21:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=FzgrRMhu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353531AbiEDQ4c (ORCPT + 99 others); Wed, 4 May 2022 12:56:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354208AbiEDQx4 (ORCPT ); Wed, 4 May 2022 12:53:56 -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 C738948394; Wed, 4 May 2022 09:49:13 -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 561506176E; Wed, 4 May 2022 16:49:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A3F20C385AA; Wed, 4 May 2022 16:49:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1651682952; bh=g9pPF97d+RCHJOFXbQh0ZKnmjNdrs3ToH0uMgEVpXfs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FzgrRMhuP28y6cuukQMpwdmgZZbFuvSGE8DEtGIWH/2N1Mg9pPpGEZ56Bph1ZRJMc sDclXVBAfWqshnksw/RlfPG/aAQWiGDzdo5BeW10TJbiAa91LVYvIDOH+u0D64dUiF H6pEy8uFp5aglh6OKJj7gcXt9KlG67FAgw3dQ420= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Xiaoli Feng , Ronnie Sahlberg , Steve French , Sasha Levin Subject: [PATCH 5.4 71/84] cifs: destage any unwritten data to the server before calling copychunk_write Date: Wed, 4 May 2022 18:44:52 +0200 Message-Id: <20220504152932.993640135@linuxfoundation.org> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220504152927.744120418@linuxfoundation.org> References: <20220504152927.744120418@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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