Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1f01388 authored by Martin K. Petersen's avatar Martin K. Petersen Committed by Jens Axboe
Browse files

block: Relocate bio integrity flags



Move flags affecting the integrity code out of the bio bi_flags and into
the block integrity payload.

Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: default avatarSagi Grimberg <sagig@mellanox.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 3aec2f41
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);

+2 −2
Original line number Diff line number Diff line
@@ -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;
	}
}

+8 −1
Original line number Diff line number Diff line
@@ -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;
+2 −4
Original line number Diff line number Diff line
@@ -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