Skip to content

Commit

Permalink
JFS: make sure right-most xtree pages have header.next set to zero
Browse files Browse the repository at this point in the history
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: Dave Kleikamp <shaggy@austin.ibm.com>
  • Loading branch information
Dave Kleikamp committed Oct 28, 2005
1 parent b6a47fd commit 7038f1c
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions fs/jfs/jfs_xtree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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 ? */
Expand Down

0 comments on commit 7038f1c

Please sign in to comment.