|
@@ -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;
|
|
|
}
|