]> granicus.if.org Git - zfs/commitdiff
Enable compiler to typecheck logging
authorMatthew Macy <mmacy@mattmacy.io>
Thu, 12 Sep 2019 20:28:26 +0000 (13:28 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 12 Sep 2019 20:28:26 +0000 (13:28 -0700)
Annotate spa logging declarations with printflike
Workaround gcc bug (non disable-able warning) by
replacing "" with " "

Reviewed-by: Matt Ahrens <matt@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9316

12 files changed:
include/os/linux/spl/sys/debug.h
include/sys/spa.h
lib/libspl/include/sys/debug.h
module/zfs/dmu_objset.c
module/zfs/dmu_recv.c
module/zfs/dsl_dataset.c
module/zfs/dsl_destroy.c
module/zfs/dsl_scan.c
module/zfs/dsl_userhold.c
module/zfs/spa.c
module/zfs/spa_checkpoint.c
module/zfs/vdev_removal.c

index ecda6bcb895927992dc4f1411b7586909110cabd..8fad3bef6d7ad2e05fcf042664c1e00bf20173b8 100644 (file)
@@ -50,6 +50,8 @@
 /*
  * Common DEBUG functionality.
  */
+#define        __printflike(a, b)      __printf(a, b)
+
 int spl_panic(const char *file, const char *func, int line,
     const char *fmt, ...);
 void spl_dumpstack(void);
index 8323662f604cdb11a4bbbe174a6085470e1a4239..51e4c0f77bb51cc326a02cfad06a17c44a9f3e89 100644 (file)
@@ -1153,11 +1153,11 @@ extern int spa_history_log_nvl(spa_t *spa, nvlist_t *nvl);
 extern void spa_history_log_version(spa_t *spa, const char *operation,
     dmu_tx_t *tx);
 extern void spa_history_log_internal(spa_t *spa, const char *operation,
-    dmu_tx_t *tx, const char *fmt, ...);
+    dmu_tx_t *tx, const char *fmt, ...) __printflike(4, 5);
 extern void spa_history_log_internal_ds(struct dsl_dataset *ds, const char *op,
-    dmu_tx_t *tx, const char *fmt, ...);
+    dmu_tx_t *tx, const char *fmt, ...)  __printflike(4, 5);
 extern void spa_history_log_internal_dd(dsl_dir_t *dd, const char *operation,
-    dmu_tx_t *tx, const char *fmt, ...);
+    dmu_tx_t *tx, const char *fmt, ...) __printflike(4, 5);
 
 extern const char *spa_state_to_name(spa_t *spa);
 
index fde4a012079f4bd3eb06d228848c87790ed4e9cd..c6a8c6784c664e337c262498ff83683fc7927353 100644 (file)
@@ -29,4 +29,8 @@
 
 #include <assert.h>
 
+#ifndef        __printflike
+#define        __printflike(x, y) __attribute__((__format__(__printf__, x, y)))
+#endif
+
 #endif
index 9350322fff4d07274e77a2c25e4b79505601a925..469137ecf8cb7036ce0cfc671196dad5d4225f01 100644 (file)
@@ -1262,7 +1262,7 @@ dmu_objset_create_sync(void *arg, dmu_tx_t *tx)
                mutex_exit(&ds->ds_lock);
        }
 
-       spa_history_log_internal_ds(ds, "create", tx, "");
+       spa_history_log_internal_ds(ds, "create", tx, " ");
        zvol_create_minors(spa, doca->doca_name, B_TRUE);
 
        dsl_dataset_rele_flags(ds, DS_HOLD_FLAG_DECRYPT, FTAG);
@@ -1375,7 +1375,7 @@ dmu_objset_clone_sync(void *arg, dmu_tx_t *tx)
        VERIFY0(dsl_dataset_hold_obj(pdd->dd_pool, obj, FTAG, &ds));
        dsl_dataset_name(origin, namebuf);
        spa_history_log_internal_ds(ds, "clone", tx,
-           "origin=%s (%llu)", namebuf, origin->ds_object);
+           "origin=%s (%llu)", namebuf, (u_longlong_t)origin->ds_object);
        zvol_create_minors(dp->dp_spa, doca->doca_clone, B_TRUE);
        dsl_dataset_rele(ds, FTAG);
        dsl_dataset_rele(origin, FTAG);
index ac27c98be10339608fac120501408c8efe07ec90..6249e165fa5df0b210536c089f68c7f839007470 100644 (file)
@@ -915,7 +915,7 @@ dmu_recv_begin_sync(void *arg, dmu_tx_t *tx)
 
        drba->drba_cookie->drc_ds = newds;
 
-       spa_history_log_internal_ds(newds, "receive", tx, "");
+       spa_history_log_internal_ds(newds, "receive", tx, " ");
 }
 
 static int
@@ -1093,7 +1093,7 @@ dmu_recv_resume_begin_sync(void *arg, dmu_tx_t *tx)
 
        drba->drba_cookie->drc_ds = ds;
 
-       spa_history_log_internal_ds(ds, "resume receive", tx, "");
+       spa_history_log_internal_ds(ds, "resume receive", tx, " ");
 }
 
 /*
index ba24e499b5372ec81faa95e20673ab9ca7fa4e7d..8673c6d3105aa9a671e527a53c344a5052e66260 100644 (file)
@@ -1843,7 +1843,7 @@ dsl_dataset_snapshot_sync_impl(dsl_dataset_t *ds, const char *snapname,
 
        dsl_dir_snap_cmtime_update(ds->ds_dir);
 
-       spa_history_log_internal_ds(ds->ds_prev, "snapshot", tx, "");
+       spa_history_log_internal_ds(ds->ds_prev, "snapshot", tx, " ");
 }
 
 void
@@ -3722,7 +3722,7 @@ dsl_dataset_promote_sync(void *arg, dmu_tx_t *tx)
        dsl_dir_remove_livelist(origin_ds->ds_dir, tx, B_TRUE);
 
        /* log history record */
-       spa_history_log_internal_ds(hds, "promote", tx, "");
+       spa_history_log_internal_ds(hds, "promote", tx, " ");
 
        dsl_dir_rele(odd, FTAG);
        promote_rele(ddpa, FTAG);
index a30018341a84250b00f8028c0aef25d100966d43..ee237a85b8deccd18c9418c28a333c56ebe2fb61 100644 (file)
@@ -321,14 +321,14 @@ dsl_destroy_snapshot_sync_impl(dsl_dataset_t *ds, boolean_t defer, dmu_tx_t *tx)
                ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS);
                dmu_buf_will_dirty(ds->ds_dbuf, tx);
                dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_DEFER_DESTROY;
-               spa_history_log_internal_ds(ds, "defer_destroy", tx, "");
+               spa_history_log_internal_ds(ds, "defer_destroy", tx, " ");
                return;
        }
 
        ASSERT3U(dsl_dataset_phys(ds)->ds_num_children, <=, 1);
 
        /* We need to log before removing it from the namespace. */
-       spa_history_log_internal_ds(ds, "destroy", tx, "");
+       spa_history_log_internal_ds(ds, "destroy", tx, " ");
 
        dsl_scan_ds_destroyed(ds, tx);
 
@@ -1000,7 +1000,7 @@ dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx)
        ASSERT(RRW_WRITE_HELD(&dp->dp_config_rwlock));
 
        /* We need to log before removing it from the namespace. */
-       spa_history_log_internal_ds(ds, "destroy", tx, "");
+       spa_history_log_internal_ds(ds, "destroy", tx, " ");
 
        rmorigin = (dsl_dir_is_clone(ds->ds_dir) &&
            DS_IS_DEFER_DESTROY(ds->ds_prev) &&
@@ -1167,7 +1167,7 @@ dsl_destroy_head_begin_sync(void *arg, dmu_tx_t *tx)
        dmu_buf_will_dirty(ds->ds_dbuf, tx);
        dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_INCONSISTENT;
 
-       spa_history_log_internal_ds(ds, "destroy begin", tx, "");
+       spa_history_log_internal_ds(ds, "destroy begin", tx, " ");
        dsl_dataset_rele(ds, FTAG);
 }
 
index ec71a6d91b33616c1b5931cec602929769ffbbe9..7845f1de2d2702c8e6962c1bcea5fb6676a96ffd 100644 (file)
@@ -759,7 +759,8 @@ dsl_scan_setup_sync(void *arg, dmu_tx_t *tx)
 
        spa_history_log_internal(spa, "scan setup", tx,
            "func=%u mintxg=%llu maxtxg=%llu",
-           *funcp, scn->scn_phys.scn_min_txg, scn->scn_phys.scn_max_txg);
+           *funcp, (u_longlong_t)scn->scn_phys.scn_min_txg,
+           (u_longlong_t)scn->scn_phys.scn_max_txg);
 }
 
 /*
@@ -900,13 +901,13 @@ dsl_scan_done(dsl_scan_t *scn, boolean_t complete, dmu_tx_t *tx)
 
        if (dsl_scan_restarting(scn, tx))
                spa_history_log_internal(spa, "scan aborted, restarting", tx,
-                   "errors=%llu", spa_get_errlog_size(spa));
+                   "errors=%llu", (u_longlong_t)spa_get_errlog_size(spa));
        else if (!complete)
                spa_history_log_internal(spa, "scan cancelled", tx,
-                   "errors=%llu", spa_get_errlog_size(spa));
+                   "errors=%llu", (u_longlong_t)spa_get_errlog_size(spa));
        else
                spa_history_log_internal(spa, "scan done", tx,
-                   "errors=%llu", spa_get_errlog_size(spa));
+                   "errors=%llu", (u_longlong_t)spa_get_errlog_size(spa));
 
        if (DSL_SCAN_IS_SCRUB_RESILVER(scn)) {
                spa->spa_scrub_started = B_FALSE;
@@ -957,7 +958,8 @@ dsl_scan_done(dsl_scan_t *scn, boolean_t complete, dmu_tx_t *tx)
                if (resilver_needed) {
                        spa_history_log_internal(spa,
                            "starting deferred resilver", tx,
-                           "errors=%llu", spa_get_errlog_size(spa));
+                           "errors=%llu",
+                           (u_longlong_t)spa_get_errlog_size(spa));
                        spa_async_request(spa, SPA_ASYNC_RESILVER);
                }
        }
index 2b2182fadec503ed0d1273fce83b9ae5e9161fd2..ba850c2f7198f607bf3df65080e468a761884118 100644 (file)
@@ -197,7 +197,7 @@ dsl_dataset_user_hold_sync_one_impl(nvlist_t *tmpholds, dsl_dataset_t *ds,
 
        spa_history_log_internal_ds(ds, "hold", tx,
            "tag=%s temp=%d refs=%llu",
-           htag, minor != 0, ds->ds_userrefs);
+           htag, minor != 0, (u_longlong_t)ds->ds_userrefs);
 }
 
 typedef struct zfs_hold_cleanup_arg {
index 56c6dd8cd19c3e8cb5e13d9cf57cfa7b4c6a296b..8330ab1ce8d3e6143d465befd01f4e07f141c1e7 100644 (file)
@@ -887,7 +887,7 @@ spa_change_guid_sync(void *arg, dmu_tx_t *tx)
        spa_config_exit(spa, SCL_STATE, FTAG);
 
        spa_history_log_internal(spa, "guid change", tx, "old=%llu new=%llu",
-           oldguid, *newguid);
+           (u_longlong_t)oldguid, (u_longlong_t)*newguid);
 }
 
 /*
@@ -7898,7 +7898,8 @@ spa_async_thread(void *arg)
                if (new_space != old_space) {
                        spa_history_log_internal(spa, "vdev online", NULL,
                            "pool '%s' size: %llu(+%llu)",
-                           spa_name(spa), new_space, new_space - old_space);
+                           spa_name(spa), (u_longlong_t)new_space,
+                           (u_longlong_t)(new_space - old_space));
                }
        }
 
@@ -8388,7 +8389,8 @@ spa_sync_version(void *arg, dmu_tx_t *tx)
 
        spa->spa_uberblock.ub_version = version;
        vdev_config_dirty(spa->spa_root_vdev);
-       spa_history_log_internal(spa, "set", tx, "version=%lld", version);
+       spa_history_log_internal(spa, "set", tx, "version=%lld",
+           (longlong_t)version);
 }
 
 /*
@@ -8502,7 +8504,8 @@ spa_sync_props(void *arg, dmu_tx_t *tx)
                                    spa->spa_pool_props_object, propname,
                                    8, 1, &intval, tx));
                                spa_history_log_internal(spa, "set", tx,
-                                   "%s=%lld", nvpair_name(elem), intval);
+                                   "%s=%lld", nvpair_name(elem),
+                                   (longlong_t)intval);
                        } else {
                                ASSERT(0); /* not allowed */
                        }
index b167a8321a0232e761ead1c64f0bdab2c590d85e..f6dfdab9d3e0bddb685d4e07a849bb11370caf04 100644 (file)
@@ -524,7 +524,7 @@ spa_checkpoint_sync(void *arg, dmu_tx_t *tx)
        spa_feature_incr(spa, SPA_FEATURE_POOL_CHECKPOINT, tx);
 
        spa_history_log_internal(spa, "spa checkpoint", tx,
-           "checkpointed uberblock txg=%llu", checkpoint.ub_txg);
+           "checkpointed uberblock txg=%llu", (u_longlong_t)checkpoint.ub_txg);
 }
 
 /*
index c9156054cd7fe2a1c2361332712ba8a73bd4d845..abec4d50f8c313053821a04fab161998e132472d 100644 (file)
@@ -347,7 +347,7 @@ vdev_remove_initiate_sync(void *arg, dmu_tx_t *tx)
            vic->vic_mapping_object);
 
        spa_history_log_internal(spa, "vdev remove started", tx,
-           "%s vdev %llu %s", spa_name(spa), vd->vdev_id,
+           "%s vdev %llu %s", spa_name(spa), (u_longlong_t)vd->vdev_id,
            (vd->vdev_path != NULL) ? vd->vdev_path : "-");
        /*
         * Setting spa_vdev_removal causes subsequent frees to call
@@ -1111,7 +1111,7 @@ vdev_remove_complete_sync(void *arg, dmu_tx_t *tx)
        spa_finish_removal(dmu_tx_pool(tx)->dp_spa, DSS_FINISHED, tx);
        /* vd->vdev_path is not available here */
        spa_history_log_internal(spa, "vdev remove completed",  tx,
-           "%s vdev %llu", spa_name(spa), vd->vdev_id);
+           "%s vdev %llu", spa_name(spa), (u_longlong_t)vd->vdev_id);
 }
 
 static void
@@ -1757,7 +1757,8 @@ spa_vdev_remove_cancel_sync(void *arg, dmu_tx_t *tx)
            vd->vdev_id, dmu_tx_get_txg(tx));
        spa_history_log_internal(spa, "vdev remove canceled", tx,
            "%s vdev %llu %s", spa_name(spa),
-           vd->vdev_id, (vd->vdev_path != NULL) ? vd->vdev_path : "-");
+           (u_longlong_t)vd->vdev_id,
+           (vd->vdev_path != NULL) ? vd->vdev_path : "-");
 }
 
 static int