Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp1945154iob; Thu, 5 May 2022 11:29:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxd6CQKKKvwperQfMWpd/lD3LOHVmerl18NVS3nt96KwgQfuw2SbCLN99VHXFmqmHgmlCOF X-Received: by 2002:a05:6a00:168a:b0:4f7:e161:83cd with SMTP id k10-20020a056a00168a00b004f7e16183cdmr27398883pfc.56.1651775362248; Thu, 05 May 2022 11:29:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651775362; cv=none; d=google.com; s=arc-20160816; b=zSUpelY9OloMBGYK+DYWEsDUyEw0IBCLP1Xr2dlRm0O91VeRXLEPdNYydvPJjUBr6j tHBE7teGsXvmEFfhZNdl+9HV9AlCAjl/bz2pUPGTpqV6LmPGWswvAQAR+NyWO/4WAXuP CGkkJYkv5s5SEy3DnV1isQXeWx+N4kMaeyP3M3sYB9uNV/O+wL0D++s0K92wAT+GQaqa Q2r38iKQBVWb3m2BE4cCFTAFJgT9wrAFaTllj6gXKfgyGqGglLKxvss7I+sSbrGkt1pt 9xoLDu3Xo+4N7MruZxNyxD4X3LElhvF6+PRyNcqZMLL3Yd+Gd3oPtSjG1rdvTO88OpfW fung== 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=H3qves/WadJlBam9+P3agb/z0l11fP5hB2rLAgYohxI=; b=EPx0XaE+/7YU2y0zyBjs0AI1JpST/gOUCqnn6peYG3TU6OETTDmtUlLBl95R+64DQG eTCabRlemf4QTKLKKBLRjAd2Ojlg3IBiEt/TjmhGo3vC4bBez6HyJMEWF3Rdh76wSu6E AA/JbodFOrsVAQo1jEVka1RM/y51xVkYj9U2LEcy3dMDTSkeyZnSnEMymMIDH2cFWeVd TqsKpXN9UZfQNslwsmCZr4MysX3gj9xeQwQL2e9i4CFyAElOLZ3xgypqz184nMep9ER0 uwLNUiUVGyh30uDmzKabUWhr+CAONrtHhtHXOzx4IL40TM0OVelv5gXIcOF8jd9/ni7H zilg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=opqfKUDL; 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 z17-20020a63c051000000b003c30de8071asi2379237pgi.16.2022.05.05.11.29.03; Thu, 05 May 2022 11:29:22 -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=opqfKUDL; 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 S1376658AbiEDRy7 (ORCPT + 99 others); Wed, 4 May 2022 13:54:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1357377AbiEDRPA (ORCPT ); Wed, 4 May 2022 13:15:00 -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 7D6F64C439; Wed, 4 May 2022 09:58:29 -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 34BA461912; Wed, 4 May 2022 16:58:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 84062C385A4; Wed, 4 May 2022 16:58:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1651683508; bh=xZZ2i1Rlmt1chjOQcZ+PBoeIkXNP2liprcvgy86RiRc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=opqfKUDLXVweULYeCWr5AgsnxePIR3XQBUJ81fUy/nG1DZe1FrzyA8HrtyDg2cC5a ZK9Uq+jvgoO08NCStzWqrG5J7fRGQwQkeWl2HPriAqs3imbPPAtj2S3CZGkqvqizQA Fh8buUMGWpeNLizDGk7ZCEW6bL9ja3Lvglovq8HM= 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.17 171/225] cifs: destage any unwritten data to the server before calling copychunk_write Date: Wed, 4 May 2022 18:46:49 +0200 Message-Id: <20220504153125.495272834@linuxfoundation.org> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220504153110.096069935@linuxfoundation.org> References: <20220504153110.096069935@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 5d120cd8bc78..13080d6a140b 100644 --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c @@ -1861,9 +1861,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