diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2016-08-26 01:59:50 -0400 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-08-26 01:59:50 -0400 |
commit | 722278997bc964349e23e7061d541f8df3133a04 (patch) | |
tree | 0efa953e0bf26f58c248dd5babe68a5f19004d56 | |
parent | da1f039d6947b1a49f13b39a6de0df2a3e9e1ed1 (diff) |
xfs: fix some key handling problems in _btree_simple_query_range
We only need the record's high key for the first record that we look
at; for all records, we /definitely/ need the regular record key.
Therefore, fix how the simple range query function gets its keys.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
-rw-r--r-- | fs/xfs/libxfs/xfs_btree.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index 33f14067c320..b70d9f918156 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c | |||
@@ -4563,10 +4563,10 @@ xfs_btree_simple_query_range( | |||
4563 | error = xfs_btree_get_rec(cur, &recp, &stat); | 4563 | error = xfs_btree_get_rec(cur, &recp, &stat); |
4564 | if (error || !stat) | 4564 | if (error || !stat) |
4565 | break; | 4565 | break; |
4566 | cur->bc_ops->init_high_key_from_rec(&rec_key, recp); | ||
4567 | 4566 | ||
4568 | /* Skip if high_key(rec) < low_key. */ | 4567 | /* Skip if high_key(rec) < low_key. */ |
4569 | if (firstrec) { | 4568 | if (firstrec) { |
4569 | cur->bc_ops->init_high_key_from_rec(&rec_key, recp); | ||
4570 | firstrec = false; | 4570 | firstrec = false; |
4571 | diff = cur->bc_ops->diff_two_keys(cur, low_key, | 4571 | diff = cur->bc_ops->diff_two_keys(cur, low_key, |
4572 | &rec_key); | 4572 | &rec_key); |
@@ -4575,6 +4575,7 @@ xfs_btree_simple_query_range( | |||
4575 | } | 4575 | } |
4576 | 4576 | ||
4577 | /* Stop if high_key < low_key(rec). */ | 4577 | /* Stop if high_key < low_key(rec). */ |
4578 | cur->bc_ops->init_key_from_rec(&rec_key, recp); | ||
4578 | diff = cur->bc_ops->diff_two_keys(cur, &rec_key, high_key); | 4579 | diff = cur->bc_ops->diff_two_keys(cur, &rec_key, high_key); |
4579 | if (diff > 0) | 4580 | if (diff > 0) |
4580 | break; | 4581 | break; |