11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file is released under the GPL. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DM_BIO_RECORD_H 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DM_BIO_RECORD_H 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/bio.h> 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * There are lots of mutable fields in the bio struct that get 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * changed by the lower levels of the block layer. Some targets, 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * such as multipath, may wish to resubmit a bio on error. The 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * functions in this file help the target record and restore the 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * original bio state. 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 19a920f6b3accc77d9dddbc98a7426be23ee479625Mikulas Patocka 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dm_bio_details { 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct block_device *bi_bdev; 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long bi_flags; 2375d5d8156500cd3833d66806889372e294af514dKent Overstreet struct bvec_iter bi_iter; 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void dm_bio_record(struct dm_bio_details *bd, struct bio *bio) 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bd->bi_bdev = bio->bi_bdev; 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bd->bi_flags = bio->bi_flags; 3075d5d8156500cd3833d66806889372e294af514dKent Overstreet bd->bi_iter = bio->bi_iter; 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void dm_bio_restore(struct dm_bio_details *bd, struct bio *bio) 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bio->bi_bdev = bd->bi_bdev; 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bio->bi_flags = bd->bi_flags; 3775d5d8156500cd3833d66806889372e294af514dKent Overstreet bio->bi_iter = bd->bi_iter; 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 41