From patchwork Tue Nov 26 08:15:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1200794 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) 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="jrFsO5rM"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McDn4Wxkz9sPK for ; Tue, 26 Nov 2019 19:16:25 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 5CD89C21F7A; Tue, 26 Nov 2019 08:16:21 +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 83D8EC21EC8; Tue, 26 Nov 2019 08:15:48 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6B948C21E4F; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id 96F6CC21E3A for ; Tue, 26 Nov 2019 08:15:45 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081544euoutp028becb55a1a328d7485f1c058e0031879~aqF60KBt70323303233euoutp02y for ; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191126081544euoutp028becb55a1a328d7485f1c058e0031879~aqF60KBt70323303233euoutp02y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756144; bh=xkzbukVVuSx2+P7Op58RIQ8sdiOYrHDvdbCqrelxt4E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jrFsO5rM/ZDQWCjEJzhVxa89cs5Jk9GUXgXOtALnPIaak4VW7xvqljYJMYRgx04Rg QFQcHNWgaDHp2oVDePOZtOwwN3jUoTdB5hBvf0BJ7c0ISBvAJ9NDnbNQ6v0i7WLKKm yGGJ1HWVlPKexYd7IxWhvGjpaC9W1Qp9VJNa4by4= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191126081544eucas1p143d057f7ada29620534ba410b21e4790~aqF6j_RGr0607206072eucas1p1k; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 81.56.60698.03FDCDD5; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294~aqF6T0noi2220722207eucas1p2r; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20191126081543eusmtrp213933e8107c3373c31613e2b40d68501~aqF6TRARG1942219422eusmtrp2Z; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-fa-5ddcdf304c74 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 7C.E4.07950.F2FDCDD5; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081543eusmtip29136c97180915bed45974cf5346ead69~aqF51ixOW2359923599eusmtip2Y; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:07 +0100 Message-Id: <20191126081512.5138-2-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmleLIzCtJLcpLzFFi42LZduznOV2D+3diDTY9ZrXYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8aHTZ3sBWd5K870fmRvYGzg7mLk5JAQMJHo7d7P2MXI xSEksIJR4tuVw8wQzhdGiV0T17JAOJ8ZJbbv/cYG03Ky9Sc7RGI5o8Tf5+cQWg6tPs4KUsUm YCjR9bYLrENEQELiV/9VsCXMAtuZJNpbr7OAJIQFPCSeTzjGCGKzCKhKTG9aD9bMK2Aj0bLs PjvEOnmJ1RsOMIPYnAK2Er/m/QNbLSHwmU3i4tV+FogiF4m1HX+hbGGJV8e3QDXLSPzfOZ8J oqGZUeLhubVQ3T2MEpebZjBCVFlLHD5+EWg1B9B9mhLrd+lDhB0lbrTtZQcJSwjwSdx4KwgS ZgYyJ22bzgwR5pXoaBOCqFaTmHV8HdzagxcuMUPYHhLLGmZBg2sCo0TPz72sExjlZyEsW8DI uIpRPLW0ODc9tdg4L7Vcrzgxt7g0L10vOT93EyMwaZz+d/zrDsZ9f5IOMQpwMCrx8P44eztW iDWxrLgy9xCjBAezkgiv9uE7sUK8KYmVValF+fFFpTmpxYcYpTlYlMR5qxkeRAsJpCeWpGan phakFsFkmTg4pRoYlack5nZNtqqZ8WzSjnjn8pTT891XvnD11Zytuujdj0cvLuT+31x4pvPr /avHLgglX3tYGcdomu5w6XUd/435XnXZlre2/vZr+1F2quRzQW7tmn1rbjcd9tj28nPNd4/l Teo/a4vi3LYyzFhy50nKyQajHP3Id8sDTr9a1nD/vfiOTc2HFkXM/6XEUpyRaKjFXFScCAAs 0om1FgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRmVeSWpSXmKPExsVy+t/xe7r69+/EGlzoNrLYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsaHTZ3sBWd5K870fmRvYGzg7mLk5JAQMJE42fqTvYuRi0NIYCmjxKzHlxghEjISJ6c1 sELYwhJ/rnWxQRR9YpSYeOo7WIJNwFCi6y1IgpNDREBC4lf/VUaQImaB3UwS11cdA5skLOAh 8XwChM0ioCoxvWk9WDOvgI1Ey7L77BAb5CVWbzjADGJzCthK/Jr3DywuBFQz8dg/5gmMfAsY GVYxiqSWFuem5xYb6RUn5haX5qXrJefnbmIEBvC2Yz+37GDsehd8iFGAg1GJh/fH2duxQqyJ ZcWVuYcYJTiYlUR4tQ/fiRXiTUmsrEotyo8vKs1JLT7EaAp01ERmKdHkfGB05ZXEG5oamltY GpobmxubWSiJ83YIHIwREkhPLEnNTk0tSC2C6WPi4JRqYAzPrnYyKt+hU19hJ/xKZ/Ecs9oV Wxa5xL+xZVP9dq6DfWWyZK23ab3ICfmVZ5Nrr5/e5/JfvfjgM9mJllfc1hi57Nzw29H+dPtO bQX+mKiiKcUsu4Je3//b+jr9/z6VP0L7J84w3ztB2oh1zwPZV7kXNhsn2ZSdUeeNv7JRUWr1 CkbuX2WRfkosxRmJhlrMRcWJAMZZOBl2AgAA X-CMS-MailID: 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294 X-Msg-Generator: CA X-RootMTR: 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294 References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 1/6] 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 Reviewed-by: AKASHI Takahiro --- 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 729cf39630..6cfa5b4565 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;