gfs2: Fix usage of bio->bi_status in gfs2_end_log_write
authorAndrew Price <anprice@redhat.com>
Wed, 23 Apr 2025 15:35:28 +0000 (16:35 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Thu, 24 Apr 2025 21:12:15 +0000 (23:12 +0200)
bio->bi_status is an index into the blk_errors array, not an errno. Its
__bitwise tag is cast away here, resulting in a sparse warning:

  fs/gfs2/lops.c:207:22: warning: cast from restricted blk_status_t

We could either add __force to the cast and continue logging bi_status
in the error message, or we could look up the errno in the array and log
that. As sdp->sd_log_error is used as an errno in all other cases, look
up the errno here for consistency.

Signed-off-by: Andrew Price <anprice@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/lops.c

index 0fd3b5ec7d8cce58823e1fd4b9d115eb8a298505..a1022635abc988557f793e98d75e12889cf30cb0 100644 (file)
@@ -204,9 +204,11 @@ static void gfs2_end_log_write(struct bio *bio)
        struct bvec_iter_all iter_all;
 
        if (bio->bi_status) {
-               if (!cmpxchg(&sdp->sd_log_error, 0, (int)bio->bi_status))
+               int err = blk_status_to_errno(bio->bi_status);
+
+               if (!cmpxchg(&sdp->sd_log_error, 0, err))
                        fs_err(sdp, "Error %d writing to journal, jid=%u\n",
-                              bio->bi_status, sdp->sd_jdesc->jd_jid);
+                              err, sdp->sd_jdesc->jd_jid);
                gfs2_withdraw_delayed(sdp);
                /* prevent more writes to the journal */
                clear_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);