Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp4281818ybl; Sat, 21 Dec 2019 03:41:51 -0800 (PST) X-Google-Smtp-Source: APXvYqxqetaQyuFTVh/66QGPoO1g40bK1ohZpXpciV0YCzhHvoNX7B/L7WhSqpQbahKolbsX3Xjx X-Received: by 2002:a05:6830:1689:: with SMTP id k9mr21297606otr.311.1576928511556; Sat, 21 Dec 2019 03:41:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576928511; cv=none; d=google.com; s=arc-20160816; b=CQpBEAB/f4D6PuGbJWba273l7KUO+UQyXGsKMvMQu/6kIQ6zamzHXvwSkBcHoTgS1u OjH7tAR515iuwMYoAn4phL2kllAG2SlwHOPQXY9kJr9To73hVXtQU9PPPYy4nEkimrZo +JpfCXW8y0vmgu7rauFYZ28bEAWz18YoNIZoC2GcflwJm0bS1UwbjvvQ4DSIIAnLXZob 8f7hUEYXkCpJGJTgNMwWNjrLFsit5FNWhmZglXu70wZ7ZxsaH2VQtQbofwBYLZuiSkRu cMO/QxpKNVEzLebgNZ+z/Ktw4t64ergn01ByHH/+NGSmbnnYTADYTICCHn3Te28xjtze dD7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition:mime-version :message-id:subject:cc:to:from:date:dkim-signature; bh=tFHBLDmUFkbld6WxKvLD5qto3/rPkNsHbIZafhsnJM4=; b=yE7j5tf3BGsnfE9yWBsptmXsRBB5SF6arFFOkxxW3XKgaPT7+4USUpZtxMxthqsUZc IcFsuN/MNIAj4UqbHEmZSXRec5qsO9P7pAvach2NFmCrQfVDa3yPeZrMm8IUWE4Z74xq 8ECMopP2UfuHA8Q3ixgwnZknGz6v0pGs3KPS9bFV5JL5xxu1f4njj2CQxkHkjcCKkbxG KVuN+UQtfRh0YGVb5s3XnXfJrKdr3dVp8avCGjWCKvqqZ2vBrWeKORAnMl2Ea8geUx8a Pe1PMqCUjearSN1qfZLnG9dqP0MEeEg15flKZcoXhnEvdTwHxrzn5NcXQ9MYADldLWmS h5jg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Xb7gO56D; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k16si6712830oiw.78.2019.12.21.03.41.16; Sat, 21 Dec 2019 03:41:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Xb7gO56D; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726182AbfLULeh (ORCPT + 99 others); Sat, 21 Dec 2019 06:34:37 -0500 Received: from mail-pj1-f68.google.com ([209.85.216.68]:50902 "EHLO mail-pj1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726162AbfLULeh (ORCPT ); Sat, 21 Dec 2019 06:34:37 -0500 Received: by mail-pj1-f68.google.com with SMTP id r67so5304715pjb.0 for ; Sat, 21 Dec 2019 03:34:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:mime-version:content-disposition; bh=tFHBLDmUFkbld6WxKvLD5qto3/rPkNsHbIZafhsnJM4=; b=Xb7gO56DB8GSYC+ydlBr0GYAAhVFNf/p3DrEJFFevqlFpMbinP4gqFNus6ia80e4D5 e6d/nOrLkAFh9mFaq+/o0Bft9TUQ8TjJ9vG3nr/Nau6rr6QGWBo0AYDahjnKArzFYiQB RjPms110oBCAna7qypheBxZGQqd/VKbrYuvxGtOGo+qIOEVsgnrkqwjgfvwxqQWvYMFD a7FHRHphxuSwnOB21jAn8MXPYlqH3x7AnhsJJer5oPtkVHJak+W3C54l7cYN3IQuslQ5 9O4AUd+3bvfUJCD7ScCd28SHd59iJTGw4isP2BiBsi8lCgOG8/j6266QKL6l8CqXJMRJ sXIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:mime-version :content-disposition; bh=tFHBLDmUFkbld6WxKvLD5qto3/rPkNsHbIZafhsnJM4=; b=GotQchtjMQCXrmK0r5uhysOS3tXlWawfT/BrgzHLelP85/QHLB/5XySoWP4nE5EYIz abRCgZhKl27Cl/87sxZYCm1U6UhgPF2L3T0ioSmfUYah9EMttc9NtJQNiD8OHpDN6x38 HJ6si+mOcoy1iGcNcbnHSWXD+F+RBJLzP7G0DUydmK6hThl1wK9A5rAmzbOQWjjDxt50 8LXlWCkoJkfvQSpuB/c1MpTcyhOhnaGwxuC/3iITrtVfLjdeZRmg8jGlJJQm4lj52IPO IfX0eFPqM/6JEJvkNskrHiM5Pb6UN1gSp1gj4tOC+V76UW5hj+M20AGVCXK+QBGmHb1d foDQ== X-Gm-Message-State: APjAAAXU3ex4GMLGs9PVohPbGyW+29JzsSnDAPSn7mfhHeBfPxqmwqcN 5otPj6gCoXmGBCfVKaTLPrte3L2v X-Received: by 2002:a17:902:409:: with SMTP id 9mr20754093ple.245.1576928076182; Sat, 21 Dec 2019 03:34:36 -0800 (PST) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id m71sm16405944pje.0.2019.12.21.03.34.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Dec 2019 03:34:35 -0800 (PST) Date: Sat, 21 Dec 2019 19:34:28 +0800 From: Murphy Zhou To: linux-ext4@vger.kernel.org Cc: Jan Kara Subject: [PATCH] ext4: ensure revoke credits when set xattr Message-ID: <20191221105508.nrvonawwtz5a6bfz@xzhoux.usersys.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org It is possible that we need to release and forget blocks during set xattr block, especially with 128 inode size, so we need enough revoke credits to do that. Or we'll hit WARNING since commit: [83448bd] ext4: Reserve revoke credits for freed blocks This can be triggered easily in a kinda corner case: -------------- namegen() { echo "fstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | md5sum | cut -c -10`" } md0="/`namegen`" d0=`namegen` d1=`namegen` d2=`namegen` fallocate -l 200m test.img mkfs.ext4 -F -b 4096 -I 128 test.img mkdir -p $md0 mount -o loop test.img $md0 || exit pushd $md0 mkdir ${d0} setfacl -d -m 'u::rwx' ${d0} mkdir ${d0}/${d1} # hit warning echo $? mkdir ${d0}/${d2} rm -rf ${d0} popd umount -d $md0 rm -rf $md0 test.img -------------- Which is derived from the pjd test suite[1]. Patch tested by xfstests auto group. [1] https://sourceforge.net/p/ntfs-3g/pjd-fstest/ci/master/tree/ Signed-off-by: Murphy Zhou --- fs/ext4/xattr.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 8966a54..5c32c54 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -2319,6 +2319,12 @@ static struct buffer_head *ext4_xattr_get_block(struct inode *inode) error = -ENOSPC; goto cleanup; } + error = ext4_journal_ensure_credits(handle, credits, + ext4_trans_default_revoke_credits(inode->i_sb)); + if (error < 0) { + EXT4_ERROR_INODE(inode, "ensure credits (error %d)", error); + goto cleanup; + } } error = ext4_reserve_inode_write(handle, inode, &is.iloc); -- 1.8.3.1