- goal = rgblk_search(rgd, goal, GFS2_BLKST_UNLINKED,
- GFS2_BLKST_UNLINKED);
- if (goal == 0)
- return 0;
- no_addr = goal + rgd->rd_data0;
- if (no_addr <= *last_unlinked)
+ if (goal >= rgd->rd_data)
+ break;
+ down_write(&sdp->sd_log_flush_lock);
+ block = rgblk_search(rgd, goal, GFS2_BLKST_UNLINKED,
+ GFS2_BLKST_UNLINKED);
+ up_write(&sdp->sd_log_flush_lock);
+ if (block == BFITNOENT)
+ break;
+ /* rgblk_search can return a block < goal, so we need to
+ keep it marching forward. */
+ no_addr = block + rgd->rd_data0;
+ goal++;
+ if (*last_unlinked != NO_BLOCK && no_addr <= *last_unlinked)