2023-01-25 21:00:44 +01:00
/* SPDX-License-Identifier: GPL-2.0-only */
2005-04-16 15:20:36 -07:00
/*
* Copyright ( C ) 2004 - 2005 Red Hat , Inc . All rights reserved .
*
* This file is released under the GPL .
*/
# ifndef DM_BIO_RECORD_H
# define DM_BIO_RECORD_H
# include <linux/bio.h>
2021-09-20 14:33:27 +02:00
# include <linux/blk-integrity.h>
2005-04-16 15:20:36 -07:00
/*
* There are lots of mutable fields in the bio struct that get
* changed by the lower levels of the block layer . Some targets ,
* such as multipath , may wish to resubmit a bio on error . The
* functions in this file help the target record and restore the
* original bio state .
*/
2009-04-02 19:55:23 +01:00
2005-04-16 15:20:36 -07:00
struct dm_bio_details {
2021-01-24 11:02:34 +01:00
struct block_device * bi_bdev ;
2020-02-28 18:00:53 -05:00
int __bi_remaining ;
2005-04-16 15:20:36 -07:00
unsigned long bi_flags ;
2013-08-07 14:24:19 -07:00
struct bvec_iter bi_iter ;
2020-02-28 18:00:53 -05:00
bio_end_io_t * bi_end_io ;
# if defined(CONFIG_BLK_DEV_INTEGRITY)
struct bio_integrity_payload * bi_integrity ;
# endif
2005-04-16 15:20:36 -07:00
} ;
static inline void dm_bio_record ( struct dm_bio_details * bd , struct bio * bio )
{
2021-01-24 11:02:34 +01:00
bd - > bi_bdev = bio - > bi_bdev ;
2005-04-16 15:20:36 -07:00
bd - > bi_flags = bio - > bi_flags ;
2013-08-07 14:24:19 -07:00
bd - > bi_iter = bio - > bi_iter ;
2020-02-28 18:00:53 -05:00
bd - > __bi_remaining = atomic_read ( & bio - > __bi_remaining ) ;
bd - > bi_end_io = bio - > bi_end_io ;
# if defined(CONFIG_BLK_DEV_INTEGRITY)
bd - > bi_integrity = bio_integrity ( bio ) ;
# endif
2005-04-16 15:20:36 -07:00
}
static inline void dm_bio_restore ( struct dm_bio_details * bd , struct bio * bio )
{
2021-01-24 11:02:34 +01:00
bio - > bi_bdev = bd - > bi_bdev ;
2005-04-16 15:20:36 -07:00
bio - > bi_flags = bd - > bi_flags ;
2013-08-07 14:24:19 -07:00
bio - > bi_iter = bd - > bi_iter ;
2020-02-28 18:00:53 -05:00
atomic_set ( & bio - > __bi_remaining , bd - > __bi_remaining ) ;
bio - > bi_end_io = bd - > bi_end_io ;
# if defined(CONFIG_BLK_DEV_INTEGRITY)
bio - > bi_integrity = bd - > bi_integrity ;
# endif
2005-04-16 15:20:36 -07:00
}
# endif