From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753867AbbCLJFR (ORCPT ); Thu, 12 Mar 2015 05:05:17 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:51348 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753211AbbCLJFJ (ORCPT ); Thu, 12 Mar 2015 05:05:09 -0400 X-AuditID: cbfee61a-f79c06d000004e71-c2-550156c4dece From: Chao Yu To: Jaegeuk Kim , Changman Lee Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: [PATCH] f2fs: fix to check current blkaddr in __allocate_data_blocks Date: Thu, 12 Mar 2015 17:04:24 +0800 Message-id: <000801d05ca3$a371c030$ea554090$@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Thread-index: AdBcZsRK1KrzsasXQt2fBllv5ejvpQ== Content-language: zh-cn X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrELMWRmVeSWpSXmKPExsVy+t9jQd0jYYyhBpffi1pc29fIZPFk/Sxm i0uL3C0u75rD5sDisWlVJ5vH7gWfmTz6tqxi9Pi8SS6AJYrLJiU1J7MstUjfLoErY+uniIKt 7BWn7u1mb2D8x9rFyMkhIWAi8f/XP0YIW0ziwr31bF2MXBxCAtMZJTr//2SCcH4wSsybc4UF pIpNQEViecd/JhBbRMBLYtL+E2BxZgEPicaO72BThQV8JS5dO8wOYrMIqEpsWHiXGcTmFbCU WLG5DcoWlPgx+R5Ur5bE+p3HmSBseYnNa94yQ1ykILHj7GtGiF16Eide72eEqBGX2HjkFssE RoFZSEbNQjJqFpJRs5C0LGBkWcUomlqQXFCclJ5rqFecmFtcmpeul5yfu4kRHNLPpHYwrmyw OMQowMGoxMNb8ZUhVIg1say4MvcQowQHs5IIr4QrY6gQb0piZVVqUX58UWlOavEhRmkOFiVx XiX7thAhgfTEktTs1NSC1CKYLBMHp1QD48zINXZbU25ozVpoFNh3+cOb9/n3slY8ubTYsZPp 9rzOeRO8o06GnD75WnSCw532WRdUNDb6bim6/vR4cPp3872FRb07K2YdWHlvsT2HK/sZhVj7 1xeNmLOEMzO/LxQ5qsTJ8pgrqFdyt1rT5HaJ3u1c8TafHzzSuBUTnmm2d8Xv//M/zzXVylNi Kc5INNRiLipOBACk3nOpZQIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In __allocate_data_blocks, we should check current blkaddr which is located at ofs_in_node of dnode page instead of checking first blkaddr all the time. Otherwise we can only allocate one blkaddr in each dnode page. Fix it. Signed-off-by: Chao Yu --- fs/f2fs/data.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 0057d4b..ba70a78 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -1066,7 +1066,10 @@ static void __allocate_data_blocks(struct inode *inode, loff_t offset, end_offset = ADDRS_PER_PAGE(dn.node_page, F2FS_I(inode)); while (dn.ofs_in_node < end_offset && len) { - if (dn.data_blkaddr == NULL_ADDR) { + block_t blkaddr; + + blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node); + if (blkaddr == NULL_ADDR) { if (__allocate_data_block(&dn)) goto sync_out; allocated = true; -- 2.3.1