read_error:
        _debug("read error %d", ret);
-       if (ret == -ENOMEM)
+       if (ret == -ENOMEM) {
+               fscache_retrieval_complete(op, 1);
                goto out;
+       }
 io_error:
        cachefiles_io_error_obj(object, "Page read error on backing file");
        fscache_retrieval_complete(op, 1);
                if (ret < 0) {
                        if (ret == -EEXIST) {
                                page_cache_release(netpage);
+                               fscache_retrieval_complete(op, 1);
                                continue;
                        }
                        goto nomem;
                if (ret < 0) {
                        if (ret == -EEXIST) {
                                page_cache_release(netpage);
+                               fscache_retrieval_complete(op, 1);
                                continue;
                        }
                        goto nomem;
 
                /* the netpage is unlocked and marked up to date here */
                fscache_end_io(op, netpage, 0);
-               fscache_retrieval_complete(op, 1);
                page_cache_release(netpage);
                netpage = NULL;
+               fscache_retrieval_complete(op, 1);
                continue;
        }
 
 nomem:
        _debug("nomem");
        ret = -ENOMEM;
-       goto out;
+       goto record_page_complete;
 
 read_error:
        _debug("read error %d", ret);
        if (ret == -ENOMEM)
-               goto out;
+               goto record_page_complete;
 io_error:
        cachefiles_io_error_obj(object, "Page read error on backing file");
        ret = -ENOBUFS;
+record_page_complete:
+       fscache_retrieval_complete(op, 1);
        goto out;
 }
 
 
                return -ENOBUFS;
        }
        if (unlikely(fscache_object_is_dead(object))) {
+               pr_err("%s() = -ENOBUFS [obj dead %d]", __func__, op->op.state);
+               fscache_cancel_op(&op->op);
                fscache_stat(stat_object_dead);
                return -ENOBUFS;
        }