From: Boaz Harrosh <bharrosh-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
To: Kent Overstreet <koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org,
agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
neilb-l3A5Bk7waGM@public.gmane.org,
drbd-dev-cunTk1MwBs8qoQakbn7OcQ@public.gmane.org,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
mpatocka-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
sage-BnTBU8nroG7k1uMJSBkQmQ@public.gmane.org,
yehuda-L5o5AL9CYN0tUFlbccrkMA@public.gmane.org
Subject: Re: [PATCH v4 03/12] block: Add bio_reset()
Date: Wed, 25 Jul 2012 14:19:27 +0300 [thread overview]
Message-ID: <500FD63F.7050501@panasas.com> (raw)
In-Reply-To: <1343160689-12378-4-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
On 07/24/2012 11:11 PM, Kent Overstreet wrote:
> Reusing bios is something that's been highly frowned upon in the past,
> but driver code keeps doing it anyways. If it's going to happen anyways,
> we should provide a generic method.
>
> This'll help with getting rid of bi_destructor - drivers/block/pktcdvd.c
> was open coding it, by doing a bio_init() and resetting bi_destructor.
>
> Signed-off-by: Kent Overstreet <koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
> ---
> fs/bio.c | 10 ++++++++++
> include/linux/bio.h | 1 +
> include/linux/blk_types.h | 6 ++++++
> 3 files changed, 17 insertions(+), 0 deletions(-)
>
> diff --git a/fs/bio.c b/fs/bio.c
> index 1c6c8b7..252e253 100644
> --- a/fs/bio.c
> +++ b/fs/bio.c
> @@ -261,6 +261,16 @@ void bio_init(struct bio *bio)
> }
> EXPORT_SYMBOL(bio_init);
>
> +void bio_reset(struct bio *bio)
> +{
> + /* Clear all flags below BIO_OWNS_VEC */
> + unsigned long flags = bio->bi_flags & (~0UL << BIO_OWNS_VEC);
> +
Hey I have not seen these FLAGS thing before. Are these new?
Anyway. Please NO!!! for one you need to put a big fat comment
over at flags definitions. And two what happens when one adds
a new flag. Is it reset or not reset?
I'd rather you define a flags mask for those that need to be
preserved, at header, plus a comment that any needed-to-be-preserved
cross init flags, must be added to the mask.
Never, ever, hide such crap so deep in the code.
Boaz
> + memset(bio, 0, BIO_RESET_BYTES);
> + bio->bi_flags = flags|(1 << BIO_UPTODATE);
> +}
> +EXPORT_SYMBOL(bio_reset);
> +
> /**
> * bio_alloc_bioset - allocate a bio for I/O
> * @gfp_mask: the GFP_ mask given to the slab allocator
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index 2643589..ba60319 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -226,6 +226,7 @@ extern void __bio_clone(struct bio *, struct bio *);
> extern struct bio *bio_clone(struct bio *, gfp_t);
>
> extern void bio_init(struct bio *);
> +extern void bio_reset(struct bio *);
>
> extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
> extern int bio_add_pc_page(struct request_queue *, struct bio *, struct page *,
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 293547e..40411e2 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -59,6 +59,10 @@ struct bio {
> unsigned int bi_seg_front_size;
> unsigned int bi_seg_back_size;
>
> + /*
> + * Everything starting with bi_max_vecs will be preserved by bio_reset()
> + */
> +
> unsigned int bi_max_vecs; /* max bvl_vecs we can hold */
>
> atomic_t bi_cnt; /* pin count */
> @@ -93,6 +97,8 @@ struct bio {
> struct bio_vec bi_inline_vecs[0];
> };
>
> +#define BIO_RESET_BYTES offsetof(struct bio, bi_max_vecs)
> +
> /*
> * bio flags
> */
WARNING: multiple messages have this Message-ID (diff)
From: Boaz Harrosh <bharrosh@panasas.com>
To: Kent Overstreet <koverstreet@google.com>
Cc: axboe@kernel.dk, dm-devel@redhat.com, neilb@suse.de,
linux-kernel@vger.kernel.org, linux-bcache@vger.kernel.org,
mpatocka@redhat.com, vgoyal@redhat.com, yehuda@hq.newdream.net,
tj@kernel.org, sage@newdream.net, agk@redhat.com,
drbd-dev@lists.linbit.com
Subject: Re: [Drbd-dev] [PATCH v4 03/12] block: Add bio_reset()
Date: Wed, 25 Jul 2012 14:19:27 +0300 [thread overview]
Message-ID: <500FD63F.7050501@panasas.com> (raw)
In-Reply-To: <1343160689-12378-4-git-send-email-koverstreet@google.com>
On 07/24/2012 11:11 PM, Kent Overstreet wrote:
> Reusing bios is something that's been highly frowned upon in the past,
> but driver code keeps doing it anyways. If it's going to happen anyways,
> we should provide a generic method.
>
> This'll help with getting rid of bi_destructor - drivers/block/pktcdvd.c
> was open coding it, by doing a bio_init() and resetting bi_destructor.
>
> Signed-off-by: Kent Overstreet <koverstreet@google.com>
> ---
> fs/bio.c | 10 ++++++++++
> include/linux/bio.h | 1 +
> include/linux/blk_types.h | 6 ++++++
> 3 files changed, 17 insertions(+), 0 deletions(-)
>
> diff --git a/fs/bio.c b/fs/bio.c
> index 1c6c8b7..252e253 100644
> --- a/fs/bio.c
> +++ b/fs/bio.c
> @@ -261,6 +261,16 @@ void bio_init(struct bio *bio)
> }
> EXPORT_SYMBOL(bio_init);
>
> +void bio_reset(struct bio *bio)
> +{
> + /* Clear all flags below BIO_OWNS_VEC */
> + unsigned long flags = bio->bi_flags & (~0UL << BIO_OWNS_VEC);
> +
Hey I have not seen these FLAGS thing before. Are these new?
Anyway. Please NO!!! for one you need to put a big fat comment
over at flags definitions. And two what happens when one adds
a new flag. Is it reset or not reset?
I'd rather you define a flags mask for those that need to be
preserved, at header, plus a comment that any needed-to-be-preserved
cross init flags, must be added to the mask.
Never, ever, hide such crap so deep in the code.
Boaz
> + memset(bio, 0, BIO_RESET_BYTES);
> + bio->bi_flags = flags|(1 << BIO_UPTODATE);
> +}
> +EXPORT_SYMBOL(bio_reset);
> +
> /**
> * bio_alloc_bioset - allocate a bio for I/O
> * @gfp_mask: the GFP_ mask given to the slab allocator
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index 2643589..ba60319 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -226,6 +226,7 @@ extern void __bio_clone(struct bio *, struct bio *);
> extern struct bio *bio_clone(struct bio *, gfp_t);
>
> extern void bio_init(struct bio *);
> +extern void bio_reset(struct bio *);
>
> extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
> extern int bio_add_pc_page(struct request_queue *, struct bio *, struct page *,
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 293547e..40411e2 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -59,6 +59,10 @@ struct bio {
> unsigned int bi_seg_front_size;
> unsigned int bi_seg_back_size;
>
> + /*
> + * Everything starting with bi_max_vecs will be preserved by bio_reset()
> + */
> +
> unsigned int bi_max_vecs; /* max bvl_vecs we can hold */
>
> atomic_t bi_cnt; /* pin count */
> @@ -93,6 +97,8 @@ struct bio {
> struct bio_vec bi_inline_vecs[0];
> };
>
> +#define BIO_RESET_BYTES offsetof(struct bio, bi_max_vecs)
> +
> /*
> * bio flags
> */
WARNING: multiple messages have this Message-ID (diff)
From: Boaz Harrosh <bharrosh@panasas.com>
To: Kent Overstreet <koverstreet@google.com>
Cc: <linux-bcache@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<dm-devel@redhat.com>, <tj@kernel.org>, <axboe@kernel.dk>,
<agk@redhat.com>, <neilb@suse.de>, <drbd-dev@lists.linbit.com>,
<vgoyal@redhat.com>, <mpatocka@redhat.com>, <sage@newdream.net>,
<yehuda@hq.newdream.net>
Subject: Re: [PATCH v4 03/12] block: Add bio_reset()
Date: Wed, 25 Jul 2012 14:19:27 +0300 [thread overview]
Message-ID: <500FD63F.7050501@panasas.com> (raw)
In-Reply-To: <1343160689-12378-4-git-send-email-koverstreet@google.com>
On 07/24/2012 11:11 PM, Kent Overstreet wrote:
> Reusing bios is something that's been highly frowned upon in the past,
> but driver code keeps doing it anyways. If it's going to happen anyways,
> we should provide a generic method.
>
> This'll help with getting rid of bi_destructor - drivers/block/pktcdvd.c
> was open coding it, by doing a bio_init() and resetting bi_destructor.
>
> Signed-off-by: Kent Overstreet <koverstreet@google.com>
> ---
> fs/bio.c | 10 ++++++++++
> include/linux/bio.h | 1 +
> include/linux/blk_types.h | 6 ++++++
> 3 files changed, 17 insertions(+), 0 deletions(-)
>
> diff --git a/fs/bio.c b/fs/bio.c
> index 1c6c8b7..252e253 100644
> --- a/fs/bio.c
> +++ b/fs/bio.c
> @@ -261,6 +261,16 @@ void bio_init(struct bio *bio)
> }
> EXPORT_SYMBOL(bio_init);
>
> +void bio_reset(struct bio *bio)
> +{
> + /* Clear all flags below BIO_OWNS_VEC */
> + unsigned long flags = bio->bi_flags & (~0UL << BIO_OWNS_VEC);
> +
Hey I have not seen these FLAGS thing before. Are these new?
Anyway. Please NO!!! for one you need to put a big fat comment
over at flags definitions. And two what happens when one adds
a new flag. Is it reset or not reset?
I'd rather you define a flags mask for those that need to be
preserved, at header, plus a comment that any needed-to-be-preserved
cross init flags, must be added to the mask.
Never, ever, hide such crap so deep in the code.
Boaz
> + memset(bio, 0, BIO_RESET_BYTES);
> + bio->bi_flags = flags|(1 << BIO_UPTODATE);
> +}
> +EXPORT_SYMBOL(bio_reset);
> +
> /**
> * bio_alloc_bioset - allocate a bio for I/O
> * @gfp_mask: the GFP_ mask given to the slab allocator
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index 2643589..ba60319 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -226,6 +226,7 @@ extern void __bio_clone(struct bio *, struct bio *);
> extern struct bio *bio_clone(struct bio *, gfp_t);
>
> extern void bio_init(struct bio *);
> +extern void bio_reset(struct bio *);
>
> extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
> extern int bio_add_pc_page(struct request_queue *, struct bio *, struct page *,
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 293547e..40411e2 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -59,6 +59,10 @@ struct bio {
> unsigned int bi_seg_front_size;
> unsigned int bi_seg_back_size;
>
> + /*
> + * Everything starting with bi_max_vecs will be preserved by bio_reset()
> + */
> +
> unsigned int bi_max_vecs; /* max bvl_vecs we can hold */
>
> atomic_t bi_cnt; /* pin count */
> @@ -93,6 +97,8 @@ struct bio {
> struct bio_vec bi_inline_vecs[0];
> };
>
> +#define BIO_RESET_BYTES offsetof(struct bio, bi_max_vecs)
> +
> /*
> * bio flags
> */
next prev parent reply other threads:[~2012-07-25 11:19 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-24 20:11 [PATCH v4 00/12] Block cleanups Kent Overstreet
2012-07-24 20:11 ` Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 01/12] block: Generalized bio pool freeing Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-2-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-07-25 11:06 ` Boaz Harrosh
2012-07-25 11:06 ` Boaz Harrosh
2012-07-25 11:06 ` [Drbd-dev] " Boaz Harrosh
[not found] ` <500FD32F.2010809-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2012-07-25 23:38 ` Kent Overstreet
2012-07-25 23:38 ` Kent Overstreet
2012-07-25 23:38 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 02/12] dm: Use bioset's front_pad for dm_rq_clone_bio_info Kent Overstreet
2012-07-24 20:11 ` Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 03/12] block: Add bio_reset() Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-4-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-07-25 11:19 ` Boaz Harrosh [this message]
2012-07-25 11:19 ` Boaz Harrosh
2012-07-25 11:19 ` [Drbd-dev] " Boaz Harrosh
[not found] ` <500FD63F.7050501-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2012-07-25 22:56 ` Kent Overstreet
2012-07-25 22:56 ` Kent Overstreet
2012-07-25 22:56 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 04/12] pktcdvd: Switch to bio_kmalloc() Kent Overstreet
2012-07-24 20:11 ` Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-5-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-07-25 11:29 ` Boaz Harrosh
2012-07-25 11:29 ` Boaz Harrosh
2012-07-25 11:29 ` [Drbd-dev] " Boaz Harrosh
[not found] ` <500FD8B7.9040701-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2012-07-25 23:01 ` Kent Overstreet
2012-07-25 23:01 ` Kent Overstreet
2012-07-25 23:01 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 05/12] block: Kill bi_destructor Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-6-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-07-25 11:39 ` Boaz Harrosh
2012-07-25 11:39 ` Boaz Harrosh
2012-07-25 11:39 ` [Drbd-dev] " Boaz Harrosh
[not found] ` <500FDB0D.4070605-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org>
2012-07-25 23:15 ` Kent Overstreet
2012-07-25 23:15 ` Kent Overstreet
2012-07-25 23:15 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 06/12] block: Add an explicit bio flag for bios that own their bvec Kent Overstreet
2012-07-24 20:11 ` Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-1-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-07-24 20:11 ` [PATCH v4 07/12] block: Rename bio_split() -> bio_pair_split() Kent Overstreet
2012-07-24 20:11 ` Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 09/12] block: Rework bio_pair_split() Kent Overstreet
2012-07-24 20:11 ` Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-10-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-07-25 12:03 ` Boaz Harrosh
2012-07-25 12:03 ` Boaz Harrosh
2012-07-25 12:03 ` [Drbd-dev] " Boaz Harrosh
2012-07-24 20:11 ` [PATCH v4 08/12] block: Introduce new bio_split() Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
2012-07-25 11:55 ` Boaz Harrosh
2012-07-25 11:55 ` Boaz Harrosh
2012-07-25 11:55 ` [Drbd-dev] " Boaz Harrosh
2012-07-25 23:26 ` Kent Overstreet
2012-07-25 23:26 ` [Drbd-dev] " Kent Overstreet
2012-07-27 0:50 ` [PATCH] A possible deadlock with stacked devices (was: [PATCH v4 08/12] block: Introduce new bio_split()) Mikulas Patocka
2012-07-27 0:50 ` [Drbd-dev] " Mikulas Patocka
2012-08-15 23:07 ` Kent Overstreet
2012-08-15 23:07 ` [Drbd-dev] " Kent Overstreet
[not found] ` <20120815230715.GD2758-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-29 16:08 ` Mikulas Patocka
2012-08-29 16:08 ` Mikulas Patocka
2012-07-24 20:11 ` [PATCH v4 10/12] block: Add bio_clone_kmalloc() Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-11-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-07-25 12:05 ` Boaz Harrosh
2012-07-25 12:05 ` Boaz Harrosh
2012-07-25 12:05 ` [Drbd-dev] " Boaz Harrosh
2012-07-24 20:11 ` [PATCH v4 11/12] block: Add bio_clone_bioset() Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
2012-07-24 20:11 ` [PATCH v4 12/12] block: Only clone bio vecs that are in use Kent Overstreet
2012-07-24 20:11 ` [Drbd-dev] " Kent Overstreet
[not found] ` <1343160689-12378-13-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-07 3:17 ` Muthu Kumar
2012-08-07 3:17 ` Muthu Kumar
2012-08-07 3:17 ` [Drbd-dev] " Muthu Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=500FD63F.7050501@panasas.com \
--to=bharrosh-c4p08nqkorlbdgjk7y7tuq@public.gmane.org \
--cc=agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org \
--cc=dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=drbd-dev-cunTk1MwBs8qoQakbn7OcQ@public.gmane.org \
--cc=koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mpatocka-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=neilb-l3A5Bk7waGM@public.gmane.org \
--cc=sage-BnTBU8nroG7k1uMJSBkQmQ@public.gmane.org \
--cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=yehuda-L5o5AL9CYN0tUFlbccrkMA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.