mirror of https://gitee.com/openkylin/linux.git
xfs: avoid repeated pointer dereferences
In xlog_find_cycle_start() use a local variable for some repeated operations rather than constantly accessing the memory location whose address is passed in. (This version drops an assertion that a pointer is non-null.) Signed-off-by: Alex Elder <aelder@sgi.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
9db127edb5
commit
e3bb2e30d5
|
@ -354,26 +354,27 @@ xlog_find_cycle_start(
|
|||
{
|
||||
xfs_caddr_t offset;
|
||||
xfs_daddr_t mid_blk;
|
||||
xfs_daddr_t end_blk;
|
||||
uint mid_cycle;
|
||||
int error;
|
||||
|
||||
mid_blk = BLK_AVG(first_blk, *last_blk);
|
||||
while (mid_blk != first_blk && mid_blk != *last_blk) {
|
||||
end_blk = *last_blk;
|
||||
mid_blk = BLK_AVG(first_blk, end_blk);
|
||||
while (mid_blk != first_blk && mid_blk != end_blk) {
|
||||
error = xlog_bread(log, mid_blk, 1, bp, &offset);
|
||||
if (error)
|
||||
return error;
|
||||
mid_cycle = xlog_get_cycle(offset);
|
||||
if (mid_cycle == cycle) {
|
||||
*last_blk = mid_blk;
|
||||
/* last_half_cycle == mid_cycle */
|
||||
} else {
|
||||
first_blk = mid_blk;
|
||||
/* first_half_cycle == mid_cycle */
|
||||
}
|
||||
mid_blk = BLK_AVG(first_blk, *last_blk);
|
||||
if (mid_cycle == cycle)
|
||||
end_blk = mid_blk; /* last_half_cycle == mid_cycle */
|
||||
else
|
||||
first_blk = mid_blk; /* first_half_cycle == mid_cycle */
|
||||
mid_blk = BLK_AVG(first_blk, end_blk);
|
||||
}
|
||||
ASSERT((mid_blk == first_blk && mid_blk+1 == *last_blk) ||
|
||||
(mid_blk == *last_blk && mid_blk-1 == first_blk));
|
||||
ASSERT((mid_blk == first_blk && mid_blk+1 == end_blk) ||
|
||||
(mid_blk == end_blk && mid_blk-1 == first_blk));
|
||||
|
||||
*last_blk = end_blk;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue