if (seg->dev < 0)
/* Setting 'next' address for last cluster in
* a cleaner segment */
- return 0;
+ return (u64)-1;
if (seg->table > seg->nxt_table ||
(seg->table == seg->nxt_table &&
seg->row >= seg->nxt_row))
/* We have gone beyond the end of the cluster,
* must be bad data during roll-forward
*/
- return 0;
+ return (u64)-1;
addr = seg->col * dv->stride;
addr += seg->row;
addr += seg->table * dv->rows_per_table;
struct fs_dev *dv = &fs->devs[seg->dev];
u64 addr = seg_addr(fs, seg);
- if (!addr)
+ if (!(addr+1))
/* Beyond end of cluster */
- return 0;
+ return addr;
/* now step forward in column or table or seg */
seg->row++;
current_block++;
cluster_incdesc(wc, desc_start, b, fs->blocksize_bits);
addr = lafs_seg_next(fs, &wc->seg);
- BUG_ON(!addr);
+ BUG_ON(!addr || !(addr+1));
if (cnum && test_bit(B_Dirty, &b->flags))
/* We are cleaning but this block is now dirty.
* Don't waste the UnincCredit on recording the
segend = wc->seg; /* We may write zeros from here */
seg_step(fs, &wc->seg);
wc->remaining = seg_remainder(fs, &wc->seg);
- /* Need to make sure out ->next_addr gets set properly
+ /* Need to make sure our ->next_addr gets set properly
* for non-cleaning segments
*/
if (wc->remaining < 2) {