Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7038f1cb authored by Dave Kleikamp's avatar Dave Kleikamp
Browse files

JFS: make sure right-most xtree pages have header.next set to zero



The xtTruncate code was only doing this for leaf pages.  When a file is
horribly fragmented, we may truncate a file leaving an internal page with
an invalid head.next field, which may cause a stale page to be referenced.

Signed-off-by: default avatarDave Kleikamp <shaggy@austin.ibm.com>
parent b6a47fd8
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -3516,16 +3516,10 @@ s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
	/* process entries backward from last index */
	index = le16_to_cpu(p->header.nextindex) - 1;

	if (p->header.flag & BT_INTERNAL)
		goto getChild;

	/*
	 *      leaf page
	 */

	/* Since this is the rightmost leaf, and we may have already freed
	 * a page that was formerly to the right, let's make sure that the
	 * next pointer is zero.
	/* Since this is the rightmost page at this level, and we may have
	 * already freed a page that was formerly to the right, let's make
	 * sure that the next pointer is zero.
	 */
	if (p->header.next) {
		if (log)
@@ -3539,6 +3533,12 @@ s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag)
		p->header.next = 0;
	}

	if (p->header.flag & BT_INTERNAL)
		goto getChild;

	/*
	 *      leaf page
	 */
	freed = 0;

	/* does region covered by leaf page precede Teof ? */