]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/lightnvm/pblk-cache.c
lightnvm: pblk: fail gracefully on irrec. error
[karo-tx-linux.git] / drivers / lightnvm / pblk-cache.c
index 59bcea88db842f93ffca0a7d19cde803cbf327c5..024a8fc93069e74f4a84f6efcd1ac356fc2667c2 100644 (file)
@@ -31,9 +31,13 @@ int pblk_write_to_cache(struct pblk *pblk, struct bio *bio, unsigned long flags)
         */
 retry:
        ret = pblk_rb_may_write_user(&pblk->rwb, bio, nr_entries, &bpos);
-       if (ret == NVM_IO_REQUEUE) {
+       switch (ret) {
+       case NVM_IO_REQUEUE:
                io_schedule();
                goto retry;
+       case NVM_IO_ERR:
+               pblk_pipeline_stop(pblk);
+               goto out;
        }
 
        if (unlikely(!bio_has_data(bio)))
@@ -58,6 +62,8 @@ retry:
        atomic_long_add(nr_entries, &pblk->req_writes);
 #endif
 
+       pblk_rl_inserted(&pblk->rl, nr_entries);
+
 out:
        pblk_write_should_kick(pblk);
        return ret;