block: Relocate bio integrity flags
authorMartin K. Petersen <martin.petersen@oracle.com>
Fri, 26 Sep 2014 23:20:04 +0000 (19:20 -0400)
committerJens Axboe <axboe@fb.com>
Sat, 27 Sep 2014 15:14:54 +0000 (09:14 -0600)
Move flags affecting the integrity code out of the bio bi_flags and into
the block integrity payload.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/bio-integrity.c
drivers/scsi/sd_dif.c
include/linux/bio.h
include/linux/blk_types.h

index e64733b..26aa901 100644 (file)
@@ -100,7 +100,7 @@ void bio_integrity_free(struct bio *bio)
        struct bio_integrity_payload *bip = bio_integrity(bio);
        struct bio_set *bs = bio->bi_pool;
 
-       if (bip->bip_owns_buf)
+       if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
                kfree(page_address(bip->bip_vec->bv_page) +
                      bip->bip_vec->bv_offset);
 
@@ -293,7 +293,7 @@ int bio_integrity_prep(struct bio *bio)
                return -EIO;
        }
 
-       bip->bip_owns_buf = 1;
+       bip->bip_flags |= BIP_BLOCK_INTEGRITY;
        bip->bip_iter.bi_size = len;
        bip_set_seed(bip, bio->bi_iter.bi_sector);
 
index 1e971c6..4ce636f 100644 (file)
@@ -326,7 +326,7 @@ void sd_dif_prepare(struct request *rq, sector_t hw_sector,
                unsigned int j;
 
                /* Already remapped? */
-               if (bio_flagged(bio, BIO_MAPPED_INTEGRITY))
+               if (bip->bip_flags & BIP_MAPPED_INTEGRITY)
                        break;
 
                virt = bip_get_seed(bip) & 0xffffffff;
@@ -347,7 +347,7 @@ void sd_dif_prepare(struct request *rq, sector_t hw_sector,
                        kunmap_atomic(sdt);
                }
 
-               bio->bi_flags |= (1 << BIO_MAPPED_INTEGRITY);
+               bip->bip_flags |= BIP_MAPPED_INTEGRITY;
        }
 }
 
index 3fd3666..b508cf6 100644 (file)
@@ -315,7 +315,7 @@ struct bio_integrity_payload {
        unsigned short          bip_slab;       /* slab the bip came from */
        unsigned short          bip_vcnt;       /* # of integrity bio_vecs */
        unsigned short          bip_max_vcnt;   /* integrity bio_vec slots */
-       unsigned                bip_owns_buf:1; /* should free bip_buf */
+       unsigned short          bip_flags;      /* control flags */
 
        struct work_struct      bip_work;       /* I/O completion */
 
@@ -323,6 +323,13 @@ struct bio_integrity_payload {
        struct bio_vec          bip_inline_vecs[0];/* embedded bvec array */
 };
 
+enum bip_flags {
+       BIP_BLOCK_INTEGRITY     = 1 << 0, /* block layer owns integrity data */
+       BIP_MAPPED_INTEGRITY    = 1 << 1, /* ref tag has been remapped */
+       BIP_CTRL_NOCHECK        = 1 << 2, /* disable HBA integrity checking */
+       BIP_DISK_NOCHECK        = 1 << 3, /* disable disk integrity checking */
+};
+
 static inline sector_t bip_get_seed(struct bio_integrity_payload *bip)
 {
        return bip->bip_iter.bi_sector;
index 6a5d2f2..38bc008 100644 (file)
@@ -120,10 +120,8 @@ struct bio {
 #define BIO_USER_MAPPED 6      /* contains user pages */
 #define BIO_EOPNOTSUPP 7       /* not supported */
 #define BIO_NULL_MAPPED 8      /* contains invalid user pages */
-#define BIO_FS_INTEGRITY 9     /* fs owns integrity data, not block layer */
-#define BIO_QUIET      10      /* Make BIO Quiet */
-#define BIO_MAPPED_INTEGRITY 11/* integrity metadata has been remapped */
-#define BIO_SNAP_STABLE        12      /* bio data must be snapshotted during write */
+#define BIO_QUIET      9       /* Make BIO Quiet */
+#define BIO_SNAP_STABLE        10      /* bio data must be snapshotted during write */
 
 /*
  * Flags starting here get preserved by bio_reset() - this includes