2005-04-17 02:20:36 +04: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>
/*
* 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 22:55:23 +04:00
2005-04-17 02:20:36 +04:00
struct dm_bio_details {
2017-08-23 20:10:32 +03:00
struct gendisk * bi_disk ;
u8 bi_partno ;
2020-02-29 02:00:53 +03:00
int __bi_remaining ;
2005-04-17 02:20:36 +04:00
unsigned long bi_flags ;
2013-08-08 01:24:19 +04:00
struct bvec_iter bi_iter ;
2020-02-29 02:00:53 +03:00
bio_end_io_t * bi_end_io ;
# if defined(CONFIG_BLK_DEV_INTEGRITY)
struct bio_integrity_payload * bi_integrity ;
# endif
2005-04-17 02:20:36 +04:00
} ;
static inline void dm_bio_record ( struct dm_bio_details * bd , struct bio * bio )
{
2017-08-23 20:10:32 +03:00
bd - > bi_disk = bio - > bi_disk ;
bd - > bi_partno = bio - > bi_partno ;
2005-04-17 02:20:36 +04:00
bd - > bi_flags = bio - > bi_flags ;
2013-08-08 01:24:19 +04:00
bd - > bi_iter = bio - > bi_iter ;
2020-02-29 02:00:53 +03: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-17 02:20:36 +04:00
}
static inline void dm_bio_restore ( struct dm_bio_details * bd , struct bio * bio )
{
2017-08-23 20:10:32 +03:00
bio - > bi_disk = bd - > bi_disk ;
bio - > bi_partno = bd - > bi_partno ;
2005-04-17 02:20:36 +04:00
bio - > bi_flags = bd - > bi_flags ;
2013-08-08 01:24:19 +04:00
bio - > bi_iter = bd - > bi_iter ;
2020-02-29 02:00:53 +03: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-17 02:20:36 +04:00
}
# endif