Merge git://git.infradead.org/users/eparis/audit
[firefly-linux-kernel-4.4.55.git] / include / linux / bio.h
index 448d8c052cb77ae96279196c9a7b7d12dbd7021f..7347f486ceca4ff9e64989c5ae5d6578524c0d8f 100644 (file)
@@ -292,6 +292,14 @@ static inline unsigned bio_segments(struct bio *bio)
  */
 #define bio_get(bio)   atomic_inc(&(bio)->bi_cnt)
 
+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 */
+       BIP_IP_CHECKSUM         = 1 << 4, /* IP checksum */
+};
+
 #if defined(CONFIG_BLK_DEV_INTEGRITY)
 
 static inline struct bio_integrity_payload *bio_integrity(struct bio *bio)
@@ -315,13 +323,35 @@ 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 */
 
        struct bio_vec          *bip_vec;
        struct bio_vec          bip_inline_vecs[0];/* embedded bvec array */
 };
+
+static inline bool bio_integrity_flagged(struct bio *bio, enum bip_flags flag)
+{
+       struct bio_integrity_payload *bip = bio_integrity(bio);
+
+       if (bip)
+               return bip->bip_flags & flag;
+
+       return false;
+}
+
+static inline sector_t bip_get_seed(struct bio_integrity_payload *bip)
+{
+       return bip->bip_iter.bi_sector;
+}
+
+static inline void bip_set_seed(struct bio_integrity_payload *bip,
+                               sector_t seed)
+{
+       bip->bip_iter.bi_sector = seed;
+}
+
 #endif /* CONFIG_BLK_DEV_INTEGRITY */
 
 extern void bio_trim(struct bio *bio, int offset, int size);
@@ -348,6 +378,7 @@ static inline struct bio *bio_next_split(struct bio *bio, int sectors,
 }
 
 extern struct bio_set *bioset_create(unsigned int, unsigned int);
+extern struct bio_set *bioset_create_nobvec(unsigned int, unsigned int);
 extern void bioset_free(struct bio_set *);
 extern mempool_t *biovec_create_pool(int pool_entries);
 
@@ -681,9 +712,9 @@ extern void bio_integrity_init(void);
 
 #else /* CONFIG_BLK_DEV_INTEGRITY */
 
-static inline int bio_integrity(struct bio *bio)
+static inline void *bio_integrity(struct bio *bio)
 {
-       return 0;
+       return NULL;
 }
 
 static inline bool bio_integrity_enabled(struct bio *bio)
@@ -734,6 +765,11 @@ static inline void bio_integrity_init(void)
        return;
 }
 
+static inline bool bio_integrity_flagged(struct bio *bio, enum bip_flags flag)
+{
+       return false;
+}
+
 #endif /* CONFIG_BLK_DEV_INTEGRITY */
 
 #endif /* CONFIG_BLOCK */