From patchwork Mon Sep 16 12:24:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1162769 X-Patchwork-Delegate: trini@ti.com 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=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="Al9MqaLV"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46X56k1205z9sPw for ; Mon, 16 Sep 2019 22:25:17 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id A7527C22039; Mon, 16 Sep 2019 12:25:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 8C977C21FF8; Mon, 16 Sep 2019 12:24:37 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 5B817C22007; Mon, 16 Sep 2019 12:24:36 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id A6D05C21FF8 for ; Mon, 16 Sep 2019 12:24:32 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190916122431euoutp02f1800d2907957c6754cc48cd64cbdb21~E6r357JJv2721627216euoutp02s for ; Mon, 16 Sep 2019 12:24:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190916122431euoutp02f1800d2907957c6754cc48cd64cbdb21~E6r357JJv2721627216euoutp02s DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1568636671; bh=Fkpn1XiNOPZl2r5Z7EBsAERmkfG7tOaOPrSZqjOkVI0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Al9MqaLV8FpUsOG7wcU0ET7YC2T+1KtYtuRWOxazTAQvGXXYRLFEtGdH7EdaZBrQl U+dYe8ihtQbxyVNikKjoWcxiVyA7TKUqFkQHo/D8tyO97TxhGf+Y8tqPkEXRqYPuBX BTgxhD27PkR05UAD1/MiLQM9ugL6eYK7FjiRu23w= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190916122431eucas1p1b9744e96cb15bdd0fc6826f2c0b21b86~E6r3dui5T2419824198eucas1p1s; Mon, 16 Sep 2019 12:24:31 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 31.43.04469.FFE7F7D5; Mon, 16 Sep 2019 13:24:31 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20190916122430eucas1p19918617895f7d0d57c3f58218adc85ae~E6r2nZ-yE2419724197eucas1p1J; Mon, 16 Sep 2019 12:24:30 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190916122430eusmtrp2988813c0dfb9460746bf8c710fcdd501~E6r2ZXfuX1015910159eusmtrp2F; Mon, 16 Sep 2019 12:24:30 +0000 (GMT) X-AuditID: cbfec7f2-54fff70000001175-bb-5d7f7effd28c Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id F4.A6.04166.EFE7F7D5; Mon, 16 Sep 2019 13:24:30 +0100 (BST) Received: from AMDC2765.DIGITAL.local (unknown [106.120.51.73]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20190916122429eusmtip169a19a45df08c6650ef485061e446271~E6r18xFrf1939119391eusmtip1H; Mon, 16 Sep 2019 12:24:29 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 16 Sep 2019 14:24:15 +0200 Message-Id: <20190916122417.27520-2-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190916122417.27520-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrBIsWRmVeSWpSXmKPExsWy7djP87r/6+pjDdbN4bDYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC1mTH7JZvF2bye7A7vHvFknWDzO3tnB6NG3ZRWjx/otV1kCWKK4 bFJSczLLUov07RK4MvbMespY8JCnYsv62WwNjPO4uhg5OSQETCS+zDnO0sXIxSEksIJRYuG5 tWwQzhdGiV1PtjJCOJ8ZJd59n8IM07Ly2AFWiMRyRomtl44yw7Usmr2VHaSKTcBQouttFxuI LSIgIfGr/yrYKGaBJiaJtrXvWUASwgKuEu1b3oLZLAKqEu+ez2bqYuTg4BWwldh/UxNim7zE 6g0HmEHCnAJ2EtteOoKMkRB4zyYx8cMnVogaF4m3r88yQtjCEq+Ob2GHsGUk/u+czwTR0Mwo 8fDcWnYIp4dR4nLTDKgOa4nDxy+ygmxgFtCUWL9LHyLsKDFpykU2kLCEAJ/EjbeCIGFmIHPS tunMEGFeiY42IYhqNYlZx9fBrT144RI0sDwkTvb8g4bvRGD4/nrCMoFRfhbCsgWMjKsYxVNL i3PTU4sN81LL9YoTc4tL89L1kvNzNzEC08Ppf8c/7WD8einpEKMAB6MSD29Da12sEGtiWXFl 7iFGCQ5mJRHegNr6WCHelMTKqtSi/Pii0pzU4kOM0hwsSuK81QwPooUE0hNLUrNTUwtSi2Cy TBycUg2MKf5H3dmNcxUWzQ3fJPqtprsp+ljxqpm5tgvv1QgGvz+ztv7C3+Kp/71XcE8/ppP8 P0xmiekHtbjM0HrD/af0D6zY6cSScafw03a+6qjeXwvDpjYcjXQ/0KvmmGBtobMmffuC7c8l YtflJpg8vZq97Hd40Suz09WZ361WPd916ZkD++HJwiZ8SizFGYmGWsxFxYkAmu0wbQsDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBLMWRmVeSWpSXmKPExsVy+t/xu7r/6upjDR4d5bXYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC1mTH7JZvF2bye7A7vHvFknWDzO3tnB6NG3ZRWjx/otV1kCWKL0 bIryS0tSFTLyi0tslaINLYz0DC0t9IxMLPUMjc1jrYxMlfTtbFJSczLLUov07RL0MvbMespY 8JCnYsv62WwNjPO4uhg5OSQETCRWHjvA2sXIxSEksJRR4srB40wQCRmJk9MaWCFsYYk/17rY IIo+MUo0L9/JBpJgEzCU6HrbBWaLCEhI/Oq/yghSxCzQxiQxZdZGdpCEsICrRPuWtywgNouA qsS757OBNnBw8ArYSuy/qQmxQF5i9YYDzCBhTgE7iW0vHUHCQkAVR55sZpnAyLeAkWEVo0hq aXFuem6xoV5xYm5xaV66XnJ+7iZGYKhuO/Zz8w7GSxuDDzEKcDAq8fA2tNbFCrEmlhVX5h5i lOBgVhLhDaitjxXiTUmsrEotyo8vKs1JLT7EaAp00kRmKdHkfGAc5ZXEG5oamltYGpobmxub WSiJ83YIHIwREkhPLEnNTk0tSC2C6WPi4JRqYDRg3RpbozRHRaxFf93jaLmvzl3PmPZGeq3M WKnRemj5Hq5M+wk7G7xmMX5wmrKFb4bj27rK6VtN/5Temul3+Gd4g23C6iPrCnr4rfwTq/h4 HldYsCUcuLK4V5Px/IlIltfHksIOTJtY/eQKk82jNDXuL3bdN/cyG/9S23LHPdtz8/Ywzxtf 9imxFGckGmoxFxUnAgA/FE7KawIAAA== X-CMS-MailID: 20190916122430eucas1p19918617895f7d0d57c3f58218adc85ae X-Msg-Generator: CA X-RootMTR: 20190916122430eucas1p19918617895f7d0d57c3f58218adc85ae X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190916122430eucas1p19918617895f7d0d57c3f58218adc85ae References: <20190916122417.27520-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH 1/3] fat: write: fix broken write to fragmented files X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The code for handing file overwrite incorrectly assumed that the file on disk is always contiguous. This resulted in corrupting disk structure every time when write to existing fragmented file happened. Fix this by adding proper check for cluster discontinuity and adjust chunk size on each partial write. Signed-off-by: Marek Szyprowski Reviewed-by: Oleksandr Suvorov Reviewed-by: Lukasz Majewski --- fs/fat/fat_write.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 729cf39630d..6cfa5b45652 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -794,6 +794,8 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, newclust = get_fatent(mydata, endclust); + if ((newclust - 1) != endclust) + break; if (IS_LAST_CLUST(newclust, mydata->fatsize)) break; if (CHECK_CLUST(newclust, mydata->fatsize)) { @@ -811,7 +813,7 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, offset = 0; else offset = pos - cur_pos; - wsize = min(cur_pos + actsize, filesize) - pos; + wsize = min_t(unsigned long long, actsize, filesize - cur_pos); if (get_set_cluster(mydata, curclust, offset, buffer, wsize, &actsize)) { printf("Error get-and-setting cluster\n"); @@ -824,8 +826,6 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, if (filesize <= cur_pos) break; - /* CHECK: newclust = get_fatent(mydata, endclust); */ - if (IS_LAST_CLUST(newclust, mydata->fatsize)) /* no more clusters */ break;