Re: [PATCH] block: Remove the control of complete cpu from bio.

From: Tao Ma
Date: Sun Oct 23 2011 - 23:47:12 EST


ping.
For the detailed discussion, please refer to
https://lkml.org/lkml/2011/9/15/98

Thanks
Tao

On 09/16/2011 05:41 PM, Tao Ma wrote:
> From: Tao Ma <boyu.mt@xxxxxxxxxx>
>
> bio originally has the functionality to set the complete cpu, but
> it is broken.
>
> Chirstoph said that "This code is unused, and from the all the
> discussions lately pretty obviously broken. The only thing keeping
> it serves is creating more confusion and possibly more bugs."
>
> And Jens replied with "We can kill bio_set_completion_cpu(). I'm fine
> with leaving cpu control to the request based drivers, they are the
> only ones that can toggle the setting anyway".
>
> So this patch tries to remove all the work of controling complete cpu
> from a bio.
>
> Cc: Shaohua Li <shaohua.li@xxxxxxxxx>
> Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx>
> Cc: Jens Axboe <jaxboe@xxxxxxxxxxxx>
> Signed-off-by: Tao Ma <boyu.mt@xxxxxxxxxx>
> ---
> block/blk-core.c | 4 +---
> drivers/md/raid1.c | 1 -
> fs/bio.c | 1 -
> include/linux/bio.h | 8 --------
> include/linux/blk_types.h | 11 ++++-------
> 5 files changed, 5 insertions(+), 20 deletions(-)
>
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 90e1ffd..8a57916 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -1200,7 +1200,6 @@ out:
>
> void init_request_from_bio(struct request *req, struct bio *bio)
> {
> - req->cpu = bio->bi_comp_cpu;
> req->cmd_type = REQ_TYPE_FS;
>
> req->cmd_flags |= bio->bi_rw & REQ_COMMON_MASK;
> @@ -1281,8 +1280,7 @@ get_rq:
> */
> init_request_from_bio(req, bio);
>
> - if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags) ||
> - bio_flagged(bio, BIO_CPU_AFFINE))
> + if (test_bit(QUEUE_FLAG_SAME_COMP, &q->queue_flags))
> req->cpu = raw_smp_processor_id();
>
> plug = current->plug;
> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> index 32323f0..3107bcc 100644
> --- a/drivers/md/raid1.c
> +++ b/drivers/md/raid1.c
> @@ -2170,7 +2170,6 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *skipped, i
> bio->bi_next = NULL;
> bio->bi_flags &= ~(BIO_POOL_MASK-1);
> bio->bi_flags |= 1 << BIO_UPTODATE;
> - bio->bi_comp_cpu = -1;
> bio->bi_rw = READ;
> bio->bi_vcnt = 0;
> bio->bi_idx = 0;
> diff --git a/fs/bio.c b/fs/bio.c
> index 9bfade8..41c93c7 100644
> --- a/fs/bio.c
> +++ b/fs/bio.c
> @@ -255,7 +255,6 @@ void bio_init(struct bio *bio)
> {
> memset(bio, 0, sizeof(*bio));
> bio->bi_flags = 1 << BIO_UPTODATE;
> - bio->bi_comp_cpu = -1;
> atomic_set(&bio->bi_cnt, 1);
> }
> EXPORT_SYMBOL(bio_init);
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index ce33e68..a3c071c 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -269,14 +269,6 @@ extern void bvec_free_bs(struct bio_set *, struct bio_vec *, unsigned int);
> extern unsigned int bvec_nr_vecs(unsigned short idx);
>
> /*
> - * Allow queuer to specify a completion CPU for this bio
> - */
> -static inline void bio_set_completion_cpu(struct bio *bio, unsigned int cpu)
> -{
> - bio->bi_comp_cpu = cpu;
> -}
> -
> -/*
> * bio_set is used to allow other portions of the IO system to
> * allocate their own private memory pools for bio and iovec structures.
> * These memory pools in turn all allocate from the bio_slab
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 32f0076..174bc3a 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -59,8 +59,6 @@ struct bio {
>
> unsigned int bi_max_vecs; /* max bvl_vecs we can hold */
>
> - unsigned int bi_comp_cpu; /* completion CPU */
> -
> atomic_t bi_cnt; /* pin count */
>
> struct bio_vec *bi_io_vec; /* the actual vec list */
> @@ -93,11 +91,10 @@ struct bio {
> #define BIO_BOUNCED 5 /* bio is a bounce bio */
> #define BIO_USER_MAPPED 6 /* contains user pages */
> #define BIO_EOPNOTSUPP 7 /* not supported */
> -#define BIO_CPU_AFFINE 8 /* complete bio on same CPU as submitted */
> -#define BIO_NULL_MAPPED 9 /* contains invalid user pages */
> -#define BIO_FS_INTEGRITY 10 /* fs owns integrity data, not block layer */
> -#define BIO_QUIET 11 /* Make BIO Quiet */
> -#define BIO_MAPPED_INTEGRITY 12/* integrity metadata has been remapped */
> +#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_flagged(bio, flag) ((bio)->bi_flags & (1 << (flag)))
>
> /*

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/