xref: /linux/block/error-injection.h (revision e8dcf2d142bd720c8334233ad6cfdf00f0e76b7f)
1*e8dcf2d1SChristoph Hellwig /* SPDX-License-Identifier: GPL-2.0 */
2*e8dcf2d1SChristoph Hellwig #ifndef _BLK_ERROR_INJECTION_H
3*e8dcf2d1SChristoph Hellwig #define _BLK_ERROR_INJECTION_H 1
4*e8dcf2d1SChristoph Hellwig 
5*e8dcf2d1SChristoph Hellwig #include <linux/jump_label.h>
6*e8dcf2d1SChristoph Hellwig 
7*e8dcf2d1SChristoph Hellwig DECLARE_STATIC_KEY_FALSE(blk_error_injection_enabled);
8*e8dcf2d1SChristoph Hellwig 
9*e8dcf2d1SChristoph Hellwig void blk_error_injection_init(struct gendisk *disk);
10*e8dcf2d1SChristoph Hellwig void blk_error_injection_exit(struct gendisk *disk);
11*e8dcf2d1SChristoph Hellwig bool __blk_error_inject(struct bio *bio);
12*e8dcf2d1SChristoph Hellwig static inline bool blk_error_inject(struct bio *bio)
13*e8dcf2d1SChristoph Hellwig {
14*e8dcf2d1SChristoph Hellwig 	if (IS_ENABLED(CONFIG_BLK_ERROR_INJECTION) &&
15*e8dcf2d1SChristoph Hellwig 	    static_branch_unlikely(&blk_error_injection_enabled) &&
16*e8dcf2d1SChristoph Hellwig 	    test_bit(GD_ERROR_INJECT, &bio->bi_bdev->bd_disk->state))
17*e8dcf2d1SChristoph Hellwig 		return __blk_error_inject(bio);
18*e8dcf2d1SChristoph Hellwig 	return false;
19*e8dcf2d1SChristoph Hellwig }
20*e8dcf2d1SChristoph Hellwig 
21*e8dcf2d1SChristoph Hellwig #endif /* _BLK_ERROR_INJECTION_H */
22