avail = 0;
used = cluster_insert(&wc->slhead, &wc->clhead, b, avail);
- if (used < 0) {
- /* won't fit */
- // printk("Wont fit - used = %d\n", used);
- if (wc->slhead.b == NULL) {
- err = new_segment(fs, cnum);
- if (err) {
- /* No cleaner segments - this will have to go
- * out with a checkpoint.
- * Block is still 'dirty' - just clear
- * writeback flag.
- */
- lafs_writeback_done(b);
- putref(b, MKREF(cluster));
- mutex_unlock(&wc->lock);
- return -ENOSPC;
- }
- } else
- cluster_flush(fs, cnum);
- } else
+ if (used >= 0)
lafs_io_wake(b);
+ else if (wc->slhead.b)
+ cluster_flush(fs, cnum);
+ else {
+ err = new_segment(fs, cnum);
+ if (err) {
+ /* No cleaner segments - this will have to go
+ * out with a checkpoint.
+ * Block is still 'dirty' - just clear
+ * writeback flag.
+ */
+ lafs_writeback_done(b);
+ putref(b, MKREF(cluster));
+ mutex_unlock(&wc->lock);
+ return -ENOSPC;
+ }
+ }
+
} while (used < 0);
if (used > 0)