From patchwork Tue Nov 22 14:20:16 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 101476 Delivered-To: patch@linaro.org Received: by 10.140.97.165 with SMTP id m34csp2120568qge; Tue, 22 Nov 2016 06:21:30 -0800 (PST) X-Received: by 10.98.166.70 with SMTP id t67mr26120496pfe.132.1479824489907; Tue, 22 Nov 2016 06:21:29 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i4si28659438pfi.67.2016.11.22.06.21.29; Tue, 22 Nov 2016 06:21:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756155AbcKVOVU (ORCPT + 26 others); Tue, 22 Nov 2016 09:21:20 -0500 Received: from mout.kundenserver.de ([212.227.126.131]:57662 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756135AbcKVOVS (ORCPT ); Tue, 22 Nov 2016 09:21:18 -0500 Received: from wuerfel.lan ([78.43.21.235]) by mrelayeu.kundenserver.de (mreue005 [212.227.15.129]) with ESMTPA (Nemesis) id 0MK5kP-1c8MaX0zKv-001Opc; Tue, 22 Nov 2016 15:20:36 +0100 From: Arnd Bergmann To: Jaegeuk Kim Cc: Arnd Bergmann , Chao Yu , Yunlei He , Damien Le Moal , Fan Li , linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: [PATCH] f2fs: fix 32-bit build Date: Tue, 22 Nov 2016 15:20:16 +0100 Message-Id: <20161122142033.1680054-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:PXv1So1gu6NbOyhd+iVRq5p/RMG2gA9PRGb7AiBL8V+xgq9aidW 6fIf8HV0+3PCwkKtjPq0dpqEb9FY17oJpQqmEL3ClniNZW7LspWF+l2HzUAXyemYNMA5/0u kxn1v8V7GZ5abxoAZjJbw+U4OpmUTRB0Er7ATrjr69+VFx6OToqJr2iii9ME8Se93SLQD1q tW0103mvaAE2rYklZdMpA== X-UI-Out-Filterresults: notjunk:1; V01:K0:NS7u3d2aEsY=:JOoLjW1j1/ndbMUGOpLVT3 Gcvh6qfvQPh/s4BL9tHhOO5ovk9Pk8KESQ3bXFpRCBsTXwoz3NQ+Thw+89mdWEQV94h92dX7m bjxDV2WLdiu5uSj+Lgd16o1IJInfHsCjPtQIRouMNYHfNtVXG4jvAfwC88BfPx/2q/wVD+Lnu 0S1N6+LAfhE9ceMP8+QEh6FmZQW4p63oqTKW5ve+LAcEFefIGxSBXPghvnsQdcZuS+/Jz+U61 6O81qSNQ1RCeWdbJs8/9pPGBasUpNTNq+MYpwkcYIPeW7gRWNLpWMZfVVA6gPtlrWkpf3l3Pe BJ+s9qHKiIGu6R/mT2OolWMV43dS3ExJZC3Xuv1/sUpFw0daKWrVDdRdY/M56QK1ULvX/Vc46 cntLgZ9ETd7EC5XWWvtLpl3pR++7r0bTnGp1NQJ5D3k0hrif81RIWxJobjXMIPnlvY25cc2JC gIb//Ma1Q1IriHZxL2QCtRX9T7wyD5xjs2ig5HIzqjTlOuI5Gh8nvk+cNlFchNm8uE2ocVqO/ qqlYunaUyDebIIOGmc8slmIK+vIYcvkl7j5E1au79oWCOoiROutEHX7pDvqSw4M5eBNGLCuPs dn5yheQG1JXFJEUqtZSeTYCB1NB9Es88NzZH2LXpwtKoxB+foOgNZUKhx1WBWD8r6nW7nEtqj jDoVvO1KvT4AJQKw5aS7vLZLGz+JAaIu7/Wjkfh2ZT0QrLdZ6uDNG6DH2LdCWp/iEnx8= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The addition of multiple-device support broke CONFIG_BLK_DEV_ZONED on 32-bit machines because of a 64-bit division: fs/f2fs/f2fs.o: In function `__issue_discard_async': extent_cache.c:(.text.__issue_discard_async+0xd4): undefined reference to `__aeabi_uldivmod' Unfortunately, the sector number is usually a 64-bit number, and we probably can't guarantee that bdev_zone_size() returns a power-of-two number, so we actually have to do the expensive 64-bit operation to get the remainder. Fixes: 792b84b74b54 ("f2fs: support multiple devices") Signed-off-by: Arnd Bergmann --- fs/f2fs/segment.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) -- 2.9.0 diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 634834e5a232..e4c5497aa172 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -685,6 +685,7 @@ static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi, { sector_t nr_sects = SECTOR_FROM_BLOCK(blklen); sector_t sector; + u32 rem; int devi = 0; if (sbi->s_ndevs) { @@ -693,7 +694,8 @@ static int __f2fs_issue_discard_zone(struct f2fs_sb_info *sbi, } sector = SECTOR_FROM_BLOCK(blkstart); - if (sector % bdev_zone_size(bdev) || nr_sects != bdev_zone_size(bdev)) { + div_u64_rem(sector, bdev_zone_size(bdev), &rem); + if (rem || nr_sects != bdev_zone_size(bdev)) { f2fs_msg(sbi->sb, KERN_INFO, "(%d) %s: Unaligned discard attempted (block %x + %x)", devi, sbi->s_ndevs ? FDEV(devi).path: "",