diff options
author | Martin K. Petersen <[email protected]> | 2014-02-06 15:14:13 -0500 |
---|---|---|
committer | Jens Axboe <[email protected]> | 2014-02-07 13:49:48 -0700 |
commit | 087787959ce851d7bbb19f10f6e9241b7f85a3ca (patch) | |
tree | d4cd09112a3620906034e88a342b05d1ea49232a | |
parent | 14ec77f352cb00ab8425ec2af03bd7e529eefe24 (diff) |
block: Fix nr_vecs for inline integrity vectors
Commit 9f060e2231ca changed the way we handle allocations for the
integrity vectors. When the vectors are inline there is no associated
slab and consequently bvec_nr_vecs() returns 0. Ensure that we check
against BIP_INLINE_VECS in that case.
Reported-by: David Milburn <[email protected]>
Tested-by: David Milburn <[email protected]>
Cc: [email protected] # v3.10+
Signed-off-by: Martin K. Petersen <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
-rw-r--r-- | fs/bio-integrity.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c index 0bad24ddc2e7..bcb4a4d533a2 100644 --- a/fs/bio-integrity.c +++ b/fs/bio-integrity.c @@ -114,6 +114,14 @@ void bio_integrity_free(struct bio *bio) } EXPORT_SYMBOL(bio_integrity_free); +static inline unsigned int bip_integrity_vecs(struct bio_integrity_payload *bip) +{ + if (bip->bip_slab == BIO_POOL_NONE) + return BIP_INLINE_VECS; + + return bvec_nr_vecs(bip->bip_slab); +} + /** * bio_integrity_add_page - Attach integrity metadata * @bio: bio to update @@ -129,7 +137,7 @@ int bio_integrity_add_page(struct bio *bio, struct page *page, struct bio_integrity_payload *bip = bio->bi_integrity; struct bio_vec *iv; - if (bip->bip_vcnt >= bvec_nr_vecs(bip->bip_slab)) { + if (bip->bip_vcnt >= bip_integrity_vecs(bip)) { printk(KERN_ERR "%s: bip_vec full\n", __func__); return 0; } |