struct datablock *b, *tmp;
dprintk("try_clean: state = %d\n", tc->ac.state);
- if (tc->ch == NULL) {
+ if (tc->ch == NULL && tc->ss) {
/* Need to read in the cluster header */
int err;
err = lafs_load_page_async(fs, tc->chead,
int doflush = 1;
for (i = 0; i < 4 ; i++) {
struct toclean *tc = &fs->cleaner.seg[i];
- if (tc->ss) {
+ if (tc->ss || !list_empty(&tc->cleaning)) {
/* Might be something to do here */
int done = try_clean(fs, tc);
if (done < 0)
lafs_checkpoint_lock(fs);
err = roll_forward(fs);
lafs_checkpoint_unlock(fs);
- for (d = 0; d < 4; d++)
+ for (d = 0; d < 4; d++) {
fs->cleaner.seg[d].chead = alloc_page(GFP_KERNEL);
+ INIT_LIST_HEAD(&fs->cleaner.seg[d].cleaning);
+ }
return err;
err: