f2fs: report the discard cmd errors properly
authorSahitya Tummala <stummala@codeaurora.org>
Wed, 15 Apr 2020 04:05:54 +0000 (09:35 +0530)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 17 Apr 2020 16:17:00 +0000 (09:17 -0700)
In case a discard_cmd is split into several bios, the dc->error
must not be overwritten once an error is reported by a bio. Also,
move it under dc->lock.

Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.c

index 90c7582..728ff6e 100644 (file)
@@ -1029,9 +1029,9 @@ static void f2fs_submit_discard_endio(struct bio *bio)
        struct discard_cmd *dc = (struct discard_cmd *)bio->bi_private;
        unsigned long flags;
 
-       dc->error = blk_status_to_errno(bio->bi_status);
-
        spin_lock_irqsave(&dc->lock, flags);
+       if (!dc->error)
+               dc->error = blk_status_to_errno(bio->bi_status);
        dc->bio_ref--;
        if (!dc->bio_ref && dc->state == D_SUBMIT) {
                dc->state = D_DONE;