lightnvm: pblk: do not log recovery read errors
authorJavier González <javier@cnexlabs.com>
Fri, 5 Jan 2018 13:16:16 +0000 (14:16 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 5 Jan 2018 15:50:12 +0000 (08:50 -0700)
On scan recovery, reads can fail. This happens because the first page
for each line is read in order to determined if the line has been used
(and thus needs to be recovered), or not. This can lead to "empty page"
read errors.

Since these errors are normal, do not log them, as they are confusing
when reviewing the logs.

Signed-off-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/lightnvm/pblk-core.c
drivers/lightnvm/pblk.h

index 5ec7ad68ff380cb1fdfa3a8f14fb5c1e94531676..0487b9340c1dca59a77acb9e7e3e6be9ad665d65 100644 (file)
@@ -742,7 +742,7 @@ static int pblk_line_submit_smeta_io(struct pblk *pblk, struct pblk_line *line,
                cmd_op = NVM_OP_PWRITE;
                flags = pblk_set_progr_mode(pblk, PBLK_WRITE);
                lba_list = emeta_to_lbas(pblk, line->emeta->buf);
-       } else if (dir == PBLK_READ) {
+       } else if (dir == PBLK_READ_RECOV || dir == PBLK_READ) {
                bio_op = REQ_OP_READ;
                cmd_op = NVM_OP_PREAD;
                flags = pblk_set_read_mode(pblk, PBLK_READ_SEQUENTIAL);
@@ -802,7 +802,7 @@ static int pblk_line_submit_smeta_io(struct pblk *pblk, struct pblk_line *line,
        if (rqd.error) {
                if (dir == PBLK_WRITE)
                        pblk_log_write_err(pblk, &rqd);
-               else
+               else if (dir == PBLK_READ)
                        pblk_log_read_err(pblk, &rqd);
        }
 
@@ -816,7 +816,7 @@ int pblk_line_read_smeta(struct pblk *pblk, struct pblk_line *line)
 {
        u64 bpaddr = pblk_line_smeta_start(pblk, line);
 
-       return pblk_line_submit_smeta_io(pblk, line, bpaddr, PBLK_READ);
+       return pblk_line_submit_smeta_io(pblk, line, bpaddr, PBLK_READ_RECOV);
 }
 
 int pblk_line_read_emeta(struct pblk *pblk, struct pblk_line *line,
index 19e622c65e927766de1df33f362733569759c048..93ec4fd2c26ee1fa4d19ca0cef34884018e340ce 100644 (file)
@@ -60,6 +60,7 @@ enum {
        PBLK_READ               = READ,
        PBLK_WRITE              = WRITE,/* Write from write buffer */
        PBLK_WRITE_INT,                 /* Internal write - no write buffer */
+       PBLK_READ_RECOV,                /* Recovery read - errors allowed */
        PBLK_ERASE,
 };