Skip to content

Commit

Permalink
block: Relocate bio integrity flags
Browse files Browse the repository at this point in the history
Move flags affecting the integrity code out of the bio bi_flags and into
the block integrity payload.

Signed-off-by: Martin K. Petersen <[email protected]>
Reviewed-by: Sagi Grimberg <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
martinkpetersen authored and axboe committed Sep 27, 2014
1 parent 3aec2f4 commit b1f0138
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 9 deletions.
4 changes: 2 additions & 2 deletions block/bio-integrity.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions drivers/scsi/sd_dif.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
}

Expand Down
9 changes: 8 additions & 1 deletion include/linux/bio.h
Original file line number Diff line number Diff line change
Expand Up @@ -315,14 +315,21 @@ 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 */
};

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;
Expand Down
6 changes: 2 additions & 4 deletions include/linux/blk_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit b1f0138

Please sign in to comment.