123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /*
- * blk-integrity.c - Block layer data integrity extensions
- *
- * Copyright (C) 2007, 2008 Oracle Corporation
- * Written by: Martin K. Petersen <martin.petersen@oracle.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
- * USA.
- *
- */
- #include <linux/blkdev.h>
- #include <linux/mempool.h>
- #include <linux/bio.h>
- #include <linux/scatterlist.h>
- #include <linux/export.h>
- #include <linux/slab.h>
- #include "blk.h"
- static struct kmem_cache *integrity_cachep;
- static const char *bi_unsupported_name = "unsupported";
- /**
- * blk_rq_count_integrity_sg - Count number of integrity scatterlist elements
- * @q: request queue
- * @bio: bio with integrity metadata attached
- *
- * Description: Returns the number of elements required in a
- * scatterlist corresponding to the integrity metadata in a bio.
- */
- int blk_rq_count_integrity_sg(struct request_queue *q, struct bio *bio)
- {
- struct bio_vec *iv, *ivprv = NULL;
- unsigned int segments = 0;
- unsigned int seg_size = 0;
- unsigned int i = 0;
- bio_for_each_integrity_vec(iv, bio, i) {
- if (ivprv) {
- if (!BIOVEC_PHYS_MERGEABLE(ivprv, iv))
|