xref: /spdk/lib/ftl/ftl_debug.h (revision 106ad3793f953d7353e5a5a1fa67fa6a82d13747)
192b5ebe0SKozlowski Mateusz /*   SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse  *   Copyright (C) 2018 Intel Corporation.
392b5ebe0SKozlowski Mateusz  *   All rights reserved.
492b5ebe0SKozlowski Mateusz  */
592b5ebe0SKozlowski Mateusz 
692b5ebe0SKozlowski Mateusz #ifndef FTL_DEBUG_H
792b5ebe0SKozlowski Mateusz #define FTL_DEBUG_H
892b5ebe0SKozlowski Mateusz 
992b5ebe0SKozlowski Mateusz #include "ftl_internal.h"
1088d1c3a6SKozlowski Mateusz #include "ftl_band.h"
1192b5ebe0SKozlowski Mateusz #include "ftl_core.h"
1292b5ebe0SKozlowski Mateusz 
1388d1c3a6SKozlowski Mateusz #if defined(DEBUG)
148fad5718SArtur Paszkiewicz void ftl_band_validate_md(struct ftl_band *band, ftl_band_validate_md_cb cb);
1588d1c3a6SKozlowski Mateusz void ftl_dev_dump_bands(struct spdk_ftl_dev *dev);
1666fe5f75SKozlowski Mateusz static inline void
ftl_debug_inject_trim_error(void)17*106ad379SMateusz Kozlowski ftl_debug_inject_trim_error(void)
1866fe5f75SKozlowski Mateusz {
19*106ad379SMateusz Kozlowski 	static int trim_no = 0;
2066fe5f75SKozlowski Mateusz 
21*106ad379SMateusz Kozlowski 	if (getenv("FTL_CRASH_ON_TRIM") && trim_no++ == 256) {
2266fe5f75SKozlowski Mateusz 		abort();
2366fe5f75SKozlowski Mateusz 	}
2466fe5f75SKozlowski Mateusz }
2588d1c3a6SKozlowski Mateusz #else
268fad5718SArtur Paszkiewicz 
278fad5718SArtur Paszkiewicz static void
_validate_cb(void * ctx)288fad5718SArtur Paszkiewicz _validate_cb(void *ctx)
298fad5718SArtur Paszkiewicz {
308fad5718SArtur Paszkiewicz 	struct ftl_band *band = ctx;
318fad5718SArtur Paszkiewicz 
328fad5718SArtur Paszkiewicz 	band->validate_cb(band, true);
338fad5718SArtur Paszkiewicz }
348fad5718SArtur Paszkiewicz 
358fad5718SArtur Paszkiewicz static inline void
ftl_band_validate_md(struct ftl_band * band,ftl_band_validate_md_cb cb)368fad5718SArtur Paszkiewicz ftl_band_validate_md(struct ftl_band *band, ftl_band_validate_md_cb cb)
378fad5718SArtur Paszkiewicz {
388fad5718SArtur Paszkiewicz 	/* For release builds this is a NOP operation, but should still be asynchronous to keep the behavior consistent */
398fad5718SArtur Paszkiewicz 	band->validate_cb = cb;
408fad5718SArtur Paszkiewicz 	spdk_thread_send_msg(band->dev->core_thread, _validate_cb, band);
418fad5718SArtur Paszkiewicz }
428fad5718SArtur Paszkiewicz 
4388d1c3a6SKozlowski Mateusz static inline void
ftl_dev_dump_bands(struct spdk_ftl_dev * dev)4488d1c3a6SKozlowski Mateusz ftl_dev_dump_bands(struct spdk_ftl_dev *dev)
4588d1c3a6SKozlowski Mateusz {
4688d1c3a6SKozlowski Mateusz }
4766fe5f75SKozlowski Mateusz static inline void
ftl_debug_inject_trim_error(void)48*106ad379SMateusz Kozlowski ftl_debug_inject_trim_error(void)
4966fe5f75SKozlowski Mateusz {
5066fe5f75SKozlowski Mateusz }
5188d1c3a6SKozlowski Mateusz #endif
5288d1c3a6SKozlowski Mateusz 
5392b5ebe0SKozlowski Mateusz void ftl_dev_dump_stats(const struct spdk_ftl_dev *dev);
5492b5ebe0SKozlowski Mateusz 
5592b5ebe0SKozlowski Mateusz #endif /* FTL_DEBUG_H */
56