dm-bio-record.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved.
  3. *
  4. * This file is released under the GPL.
  5. */
  6. #ifndef DM_BIO_RECORD_H
  7. #define DM_BIO_RECORD_H
  8. #include <linux/bio.h>
  9. /*
  10. * There are lots of mutable fields in the bio struct that get
  11. * changed by the lower levels of the block layer. Some targets,
  12. * such as multipath, may wish to resubmit a bio on error. The
  13. * functions in this file help the target record and restore the
  14. * original bio state.
  15. */
  16. struct dm_bio_details {
  17. sector_t bi_sector;
  18. struct block_device *bi_bdev;
  19. unsigned int bi_size;
  20. unsigned short bi_idx;
  21. unsigned long bi_flags;
  22. };
  23. static inline void dm_bio_record(struct dm_bio_details *bd, struct bio *bio)
  24. {
  25. bd->bi_sector = bio->bi_sector;
  26. bd->bi_bdev = bio->bi_bdev;
  27. bd->bi_size = bio->bi_size;
  28. bd->bi_idx = bio->bi_idx;
  29. bd->bi_flags = bio->bi_flags;
  30. }
  31. static inline void dm_bio_restore(struct dm_bio_details *bd, struct bio *bio)
  32. {
  33. bio->bi_sector = bd->bi_sector;
  34. bio->bi_bdev = bd->bi_bdev;
  35. bio->bi_size = bd->bi_size;
  36. bio->bi_idx = bd->bi_idx;
  37. bio->bi_flags = bd->bi_flags;
  38. }
  39. #endif