Re: [PATCH 06/32] rbd: remove bio cloning helpers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/16/2018 07:37 AM, Alex Elder wrote:
> From: Ilya Dryomov <idryomov@xxxxxxxxx>
> 
> Signed-off-by: Ilya Dryomov <idryomov@xxxxxxxxx>

Looks good.

Reviewed-by: Alex Elder <elder@xxxxxxxxxx>

> ---
>  drivers/block/rbd.c | 141 ----------------------------------------------------
>  1 file changed, 141 deletions(-)
> 
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 8eaebf609611..8b9047369ab9 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -444,8 +444,6 @@ static DEFINE_SPINLOCK(rbd_client_list_lock);
>  static struct kmem_cache	*rbd_img_request_cache;
>  static struct kmem_cache	*rbd_obj_request_cache;
>  
> -static struct bio_set		*rbd_bio_clone;
> -
>  static int rbd_major;
>  static DEFINE_IDA(rbd_dev_id_ida);
>  
> @@ -1276,49 +1274,6 @@ static void zero_bios(struct ceph_bio_iter *bio_pos, u32 off, u32 bytes)
>  	}));
>  }
>  
> -/*
> - * bio helpers
> - */
> -
> -static void bio_chain_put(struct bio *chain)
> -{
> -	struct bio *tmp;
> -
> -	while (chain) {
> -		tmp = chain;
> -		chain = chain->bi_next;
> -		bio_put(tmp);
> -	}
> -}
> -
> -/*
> - * zeros a bio chain, starting at specific offset
> - */
> -static void zero_bio_chain(struct bio *chain, int start_ofs)
> -{
> -	struct bio_vec bv;
> -	struct bvec_iter iter;
> -	unsigned long flags;
> -	void *buf;
> -	int pos = 0;
> -
> -	while (chain) {
> -		bio_for_each_segment(bv, chain, iter) {
> -			if (pos + bv.bv_len > start_ofs) {
> -				int remainder = max(start_ofs - pos, 0);
> -				buf = bvec_kmap_irq(&bv, &flags);
> -				memset(buf + remainder, 0,
> -				       bv.bv_len - remainder);
> -				flush_dcache_page(bv.bv_page);
> -				bvec_kunmap_irq(buf, &flags);
> -			}
> -			pos += bv.bv_len;
> -		}
> -
> -		chain = chain->bi_next;
> -	}
> -}
> -
>  /*
>   * similar to zero_bio_chain(), zeros data defined by a page array,
>   * starting at the given byte offset from the start of the array and
> @@ -1351,90 +1306,6 @@ static void zero_pages(struct page **pages, u64 offset, u64 end)
>  	}
>  }
>  
> -/*
> - * Clone a portion of a bio, starting at the given byte offset
> - * and continuing for the number of bytes indicated.
> - */
> -static struct bio *bio_clone_range(struct bio *bio_src,
> -					unsigned int offset,
> -					unsigned int len,
> -					gfp_t gfpmask)
> -{
> -	struct bio *bio;
> -
> -	bio = bio_clone_fast(bio_src, gfpmask, rbd_bio_clone);
> -	if (!bio)
> -		return NULL;	/* ENOMEM */
> -
> -	bio_advance(bio, offset);
> -	bio->bi_iter.bi_size = len;
> -
> -	return bio;
> -}
> -
> -/*
> - * Clone a portion of a bio chain, starting at the given byte offset
> - * into the first bio in the source chain and continuing for the
> - * number of bytes indicated.  The result is another bio chain of
> - * exactly the given length, or a null pointer on error.
> - *
> - * The bio_src and offset parameters are both in-out.  On entry they
> - * refer to the first source bio and the offset into that bio where
> - * the start of data to be cloned is located.
> - *
> - * On return, bio_src is updated to refer to the bio in the source
> - * chain that contains first un-cloned byte, and *offset will
> - * contain the offset of that byte within that bio.
> - */
> -static struct bio *bio_chain_clone_range(struct bio **bio_src,
> -					unsigned int *offset,
> -					unsigned int len,
> -					gfp_t gfpmask)
> -{
> -	struct bio *bi = *bio_src;
> -	unsigned int off = *offset;
> -	struct bio *chain = NULL;
> -	struct bio **end;
> -
> -	/* Build up a chain of clone bios up to the limit */
> -
> -	if (!bi || off >= bi->bi_iter.bi_size || !len)
> -		return NULL;		/* Nothing to clone */
> -
> -	end = &chain;
> -	while (len) {
> -		unsigned int bi_size;
> -		struct bio *bio;
> -
> -		if (!bi) {
> -			rbd_warn(NULL, "bio_chain exhausted with %u left", len);
> -			goto out_err;	/* EINVAL; ran out of bio's */
> -		}
> -		bi_size = min_t(unsigned int, bi->bi_iter.bi_size - off, len);
> -		bio = bio_clone_range(bi, off, bi_size, gfpmask);
> -		if (!bio)
> -			goto out_err;	/* ENOMEM */
> -
> -		*end = bio;
> -		end = &bio->bi_next;
> -
> -		off += bi_size;
> -		if (off == bi->bi_iter.bi_size) {
> -			bi = bi->bi_next;
> -			off = 0;
> -		}
> -		len -= bi_size;
> -	}
> -	*bio_src = bi;
> -	*offset = off;
> -
> -	return chain;
> -out_err:
> -	bio_chain_put(chain);
> -
> -	return NULL;
> -}
> -
>  /*
>   * The default/initial value for all object request flags is 0.  For
>   * each flag, once its value is set to 1 it is never reset to 0
> @@ -6390,16 +6261,8 @@ static int rbd_slab_init(void)
>  	if (!rbd_obj_request_cache)
>  		goto out_err;
>  
> -	rbd_assert(!rbd_bio_clone);
> -	rbd_bio_clone = bioset_create(BIO_POOL_SIZE, 0, 0);
> -	if (!rbd_bio_clone)
> -		goto out_err_clone;
> -
>  	return 0;
>  
> -out_err_clone:
> -	kmem_cache_destroy(rbd_obj_request_cache);
> -	rbd_obj_request_cache = NULL;
>  out_err:
>  	kmem_cache_destroy(rbd_img_request_cache);
>  	rbd_img_request_cache = NULL;
> @@ -6415,10 +6278,6 @@ static void rbd_slab_exit(void)
>  	rbd_assert(rbd_img_request_cache);
>  	kmem_cache_destroy(rbd_img_request_cache);
>  	rbd_img_request_cache = NULL;
> -
> -	rbd_assert(rbd_bio_clone);
> -	bioset_free(rbd_bio_clone);
> -	rbd_bio_clone = NULL;
>  }
>  
>  static int __init rbd_init(void)
> 

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux