[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20260119155353.c52e9ad69538668001833f38@linux-foundation.org>
Date: Mon, 19 Jan 2026 15:53:53 -0800
From: Andrew Morton <akpm@...ux-foundation.org>
To: Heming Zhao <heming.zhao@...e.com>
Cc: joseph.qi@...ux.alibaba.com, mark@...heh.com, jlbec@...lplan.org,
ocfs2-devel@...ts.linux.dev, linux-kernel@...r.kernel.org
Subject: Re: [PATCH RESEND 0/1] ocfs2: fix reflink preserve cleanup issue
On Thu, 18 Dec 2025 22:42:12 +0800 Heming Zhao <heming.zhao@...e.com> wrote:
> ping...
>
yes please ;) Some review input would be reassuring, thanks.
btw, I forgot to ask: what are the worst-case userspace-visible runtime
effects of this bug?
IOW, is a -stable backport desirable?
From: Heming Zhao <heming.zhao@...e.com>
Subject: ocfs2: fix reflink preserve cleanup issue
Date: Wed, 10 Dec 2025 09:57:24 +0800
commit c06c303832ec ("ocfs2: fix xattr array entry __counted_by error")
doesn't handle all cases and the cleanup job for preserved xattr entries
still has bug:
- the 'last' pointer should be shifted by one unit after cleanup
an array entry.
- current code logic doesn't cleanup the first entry when xh_count is 1.
Note, commit c06c303832ec is also a bug fix for 0fe9b66c65f3.
Link: https://lkml.kernel.org/r/20251210015725.8409-2-heming.zhao@suse.com
Fixes: 0fe9b66c65f3 ("ocfs2: Add preserve to reflink.")
Signed-off-by: Heming Zhao <heming.zhao@...e.com>
Cc: Mark Fasheh <mark@...heh.com>
Cc: Joel Becker <jlbec@...lplan.org>
Cc: Junxiao Bi <junxiao.bi@...cle.com>
Cc: Joseph Qi <jiangqi903@...il.com>
Cc: Changwei Ge <gechangwei@...e.cn>
Cc: Jun Piao <piaojun@...wei.com>
Signed-off-by: Andrew Morton <akpm@...ux-foundation.org>
---
fs/ocfs2/xattr.c | 4 ++++
1 file changed, 4 insertions(+)
--- a/fs/ocfs2/xattr.c~ocfs2-fix-reflink-preserve-cleanup-issue
+++ a/fs/ocfs2/xattr.c
@@ -6395,6 +6395,10 @@ static int ocfs2_reflink_xattr_header(ha
(void *)last - (void *)xe);
memset(last, 0,
sizeof(struct ocfs2_xattr_entry));
+ last = &new_xh->xh_entries[le16_to_cpu(new_xh->xh_count)] - 1;
+ } else {
+ memset(xe, 0, sizeof(struct ocfs2_xattr_entry));
+ last = NULL;
}
/*
_
Powered by blists - more mailing lists