All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <jens.axboe@oracle.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	linux-kernel@vger.kernel.org, Alan.Brunelle@hp.com,
	arjan@linux.intel.com, dgc@sgi.com, npiggin@suse.de,
	Andrew Morton <akpm@linux-foundation.org>,
	Vegard Nossum <vegard.nossum@gmail.com>,
	Pekka Enberg <penberg@gmail.com>
Subject: Re: [patch] block layer: kmemcheck fixes
Date: Thu, 7 Feb 2008 21:06:22 +0100	[thread overview]
Message-ID: <20080207200622.GP15220@kernel.dk> (raw)
In-Reply-To: <20080207193140.GA19949@elte.hu>

On Thu, Feb 07 2008, Ingo Molnar wrote:
> 
> * Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
> > On Thu, 7 Feb 2008, Ingo Molnar wrote:
> > >  	INIT_HLIST_NODE(&rq->hash);
> > >  	RB_CLEAR_NODE(&rq->rb_node);
> > > -	rq->ioprio = 0;
> > > -	rq->buffer = NULL;
> > > -	rq->ref_count = 1;
> > > -	rq->q = q;
> > > -	rq->special = NULL;
> > > -	rq->data_len = 0;
> > > -	rq->data = NULL;
> > > -	rq->nr_phys_segments = 0;
> > > -	rq->sense = NULL;
> > > -	rq->end_io = NULL;
> > > -	rq->end_io_data = NULL;
> > > -	rq->completion_data = NULL;
> > > -	rq->next_rq = NULL;
> > > +	rq->completion_data		= NULL;
> > > +	/* rq->elevator_private			*/
> > > +	/* rq->elevator_private2		*/
> > > +	/* rq->rq_disk				*/
> > > +	/* rq->start_time			*/
> > > +	rq->nr_phys_segments		= 0;
> > > +	/* rq->nr_hw_segments			*/
> > > +	rq->ioprio			= 0;
> > > +	rq->special			= NULL;
> > > +	rq->buffer			= NULL;
> > ...
> > 
> > Can we please just stop doing these one-by-one assignments, and just do 
> > something like
> > 
> > 	memset(rq, 0, sizeof(*rq));
> > 	rq->q = q;
> > 	rq->ref_count = 1;
> > 	INIT_HLIST_NODE(&rq->hash);
> > 	RB_CLEAR_NODE(&rq->rb_node);
> > 
> > instead?
> > 
> > The memset() is likely faster and smaller than one-by-one assignments 
> > anyway, even if the one-by-ones can avoid initializing some field or 
> > there ends up being a double initialization..
> 
> i definitely agree and do that for all code i write.
> 
> But if someone does item by item initialization for some crazy 
> performance reason (networking folks tend to have such constructs), it 
> should be done i think how i've done it in the patch: by systematically 
> listing _every_ field in the structure, in the same order, and 
> indicating it clearly when it is not initialized and why.

That assumes that people find the references in two places when adding
members to a structure, not very likely (people are lazy!).

> and there it already shows that we do not initialize a few other members 
> that could cause problems later on:
> 
> +       rq->data_len                    = 0;
> +       /* rq->sense_len                        */
> +       rq->data                        = NULL;
> +       rq->sense                       = NULL;
> 
> why is sense_len not initialized - while data_len is? In any case, these 

because sense isn't set, when someone sets ->sense they should set
sense_len as well.

> days the memclear instructions are dirt cheap and we should just always 
> initialize everything to zero by default, especially if it's almost all 
> zero-initialized anyway.

Completely agree, some of these are just dormant bugs waiting to happen.
Clearing everything is the sanest approach.

-- 
Jens Axboe


  reply	other threads:[~2008-02-07 20:12 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-07  9:18 [PATCH 0/8] IO queuing and complete affinity Jens Axboe
2008-02-07  9:18 ` [PATCH 1/8] block: split softirq handling into blk-softirq.c Jens Axboe
2008-02-07  9:18 ` [PATCH 2/8] Add interface for queuing work on a specific CPU Jens Axboe
2008-02-07  9:45   ` Andrew Morton
2008-02-07  9:49     ` Jens Axboe
2008-02-07 17:44       ` Harvey Harrison
2008-02-11 10:51     ` Oleg Nesterov
2008-02-07  9:19 ` [PATCH 3/8] block: make kblockd_schedule_work() take the queue as parameter Jens Axboe
2008-02-07  9:19 ` [PATCH 4/8] x86: add support for remotely triggering the block softirq Jens Axboe
2008-02-07 10:07   ` Ingo Molnar
2008-02-07 10:17     ` Jens Axboe
2008-02-07 10:25       ` Ingo Molnar
2008-02-07 10:31         ` Jens Axboe
2008-02-07 10:38           ` Ingo Molnar
2008-02-07 14:18             ` Jens Axboe
2008-02-07 10:49           ` [patch] block layer: kmemcheck fixes Ingo Molnar
2008-02-07 17:42             ` Linus Torvalds
2008-02-07 17:55               ` Jens Axboe
2008-02-07 19:31               ` Ingo Molnar
2008-02-07 20:06                 ` Jens Axboe [this message]
2008-02-08  1:22               ` David Miller
2008-02-08  1:28                 ` Linus Torvalds
2008-02-08 15:09                 ` Arjan van de Ven
2008-02-08 22:44                   ` Nick Piggin
2008-02-08 22:56                     ` Arjan van de Ven
2008-02-08 23:58                       ` Nick Piggin
2008-02-08 11:38               ` Jens Axboe
2008-02-07  9:19 ` [PATCH 5/8] x86-64: add support for remotely triggering the block softirq Jens Axboe
2008-02-07  9:19 ` [PATCH 6/8] ia64: " Jens Axboe
2008-02-07  9:19 ` [PATCH 7/8] kernel: add generic softirq interface for triggering a remote softirq Jens Axboe
2008-02-07  9:19 ` [PATCH 8/8] block: add test code for testing CPU affinity Jens Axboe
2008-02-07 15:16 ` [PATCH 0/8] IO queuing and complete affinity Alan D. Brunelle
2008-02-07 18:25 ` IO queuing and complete affinity with threads (was Re: [PATCH 0/8] IO queuing and complete affinity) Jens Axboe
2008-02-07 20:40   ` Alan D. Brunelle
2008-02-08  7:38   ` Nick Piggin
2008-02-08  7:47     ` Jens Axboe
2008-02-08  7:53       ` Nick Piggin
2008-02-08  7:59         ` Jens Axboe
2008-02-08  8:12           ` Nick Piggin
2008-02-08  8:24             ` Jens Axboe
2008-02-08  8:33               ` Nick Piggin
2008-02-11  5:22           ` David Chinner
2008-02-12  8:28             ` Jeremy Higdon

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=20080207200622.GP15220@kernel.dk \
    --to=jens.axboe@oracle.com \
    --cc=Alan.Brunelle@hp.com \
    --cc=akpm@linux-foundation.org \
    --cc=arjan@linux.intel.com \
    --cc=dgc@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=npiggin@suse.de \
    --cc=penberg@gmail.com \
    --cc=torvalds@linux-foundation.org \
    --cc=vegard.nossum@gmail.com \
    /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.