| 
									
										
										
										
											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>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * 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 { | 
					
						
							|  |  |  | 	struct block_device *bi_bdev; | 
					
						
							|  |  |  | 	unsigned long bi_flags; | 
					
						
							| 
									
										
										
										
											2013-08-07 14:24:19 -07:00
										 |  |  | 	struct bvec_iter bi_iter; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void dm_bio_record(struct dm_bio_details *bd, struct bio *bio) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	bd->bi_bdev = bio->bi_bdev; | 
					
						
							|  |  |  | 	bd->bi_flags = bio->bi_flags; | 
					
						
							| 
									
										
										
										
											2013-08-07 14:24:19 -07:00
										 |  |  | 	bd->bi_iter = bio->bi_iter; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline void dm_bio_restore(struct dm_bio_details *bd, struct bio *bio) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	bio->bi_bdev = bd->bi_bdev; | 
					
						
							|  |  |  | 	bio->bi_flags = bd->bi_flags; | 
					
						
							| 
									
										
										
										
											2013-08-07 14:24:19 -07:00
										 |  |  | 	bio->bi_iter = bd->bi_iter; | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |