All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Snitzer <snitzer@redhat.com>
To: Mikulas Patocka <mpatocka@redhat.com>
Cc: dm-devel@redhat.com, Edward Thornber <thornber@redhat.com>,
	"Alasdair G. Kergon" <agk@redhat.com>
Subject: Re: [PATCH 2/6] dm: introduce dm_accept_partial_bio
Date: Mon, 17 Mar 2014 13:43:24 -0400	[thread overview]
Message-ID: <20140317174324.GA2285@redhat.com> (raw)
In-Reply-To: <alpine.LRH.2.02.1403171251510.24934@file01.intranet.prod.int.rdu2.redhat.com>

On Mon, Mar 17 2014 at  1:08pm -0400,
Mikulas Patocka <mpatocka@redhat.com> wrote:

> 
> 
> On Mon, 17 Mar 2014, Mike Snitzer wrote:
> 
> > > +void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors)
> > > +{
> > > +	struct dm_target_io *tio = container_of(bio, struct dm_target_io, clone);
> > > +	unsigned bi_size = bio->bi_iter.bi_size >> SECTOR_SHIFT;
> > > +	BUG_ON(bi_size > *tio->len_ptr);
> > > +	BUG_ON(n_sectors > bi_size);
> > > +	*tio->len_ptr -= bi_size - n_sectors;
> > > +	bio->bi_iter.bi_size = n_sectors << SECTOR_SHIFT;
> > > +}
> > > +EXPORT_SYMBOL_GPL(dm_accept_partial_bio);
> > > +
> > 
> > The dm_accept_partial_bio interface should return an error (e.g. if bio
> > has REQ_FLUSH set, or the above BUG_ON conditions are met).  The method
> > should probably also be designated with __must_check.  And it should
> > _not_ BUG_ON.  BUG_ON is a crutch that I do not appreciate seeing in new
> > code.  If you'd like to keep them, and get stacktraces, I'd prefer
> > seeing them converted to WARN_ON that is followed with an error return.
> 
> You need to return error for externally triggered events (like disk 
> errors, memory allocation failures, etc.), not for bugs in the code.
> 
> Here, if someone passes invalid n_sectors, it is not externally triggered 
> event (the code that passed the invalid argument is just buggy) - so 
> crashing on BUG_ON is OK.
> 
> 
> Another problem is that warnings can be easily missed, BUG won't be 
> missed. For example, the lvm testsuite generates large number of messages 
> to the syslog. Consequently, when I run the testsuite, I don't read 
> syslog. Consequently, if you convert BUG_ON to WARN_ON and the testsuite 
> triggers it, I will miss it.
> 
> 
> Regarding REQ_FLUSH - it would already crash on NULL pointer dereference 
> when accessing *tio->len_ptr.

None of what you responded with here is acceptable.  Your preferred
conventions don't accomodate people implementing a new target, or
adapting an existing target, to use this new interface you've proposed.
In this instance, BUG() is a hostile response to what is likely a minor
oversight.

Returning an error will not allow the caller to do what they thought
would happen.  So even you should catch that (despite you apparently not
looking at the kernel log messages).

  reply	other threads:[~2014-03-17 17:43 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-14 22:40 [PATCH 1/6] dm: change sector_t len to unsigned Mikulas Patocka
2014-03-14 22:41 ` [PATCH 2/6] dm: introduce dm_accept_partial_bio Mikulas Patocka
2014-03-14 22:42   ` [PATCH 3/6] dm-snapshot: make the origin target allocate per-target structure Mikulas Patocka
2014-03-14 22:43     ` [PATCH 4/6] dm origin: split only write bios Mikulas Patocka
2014-03-14 22:43       ` [PATCH 5/6] dm: remove num_write_bios Mikulas Patocka
2014-03-14 22:44         ` [PATCH 6/6] dm: introduce dm_ask_for_duplicate_bios Mikulas Patocka
2014-04-25 18:50           ` Mike Snitzer
2014-04-28 15:09             ` Mikulas Patocka
2014-04-28 15:45               ` Mike Snitzer
2014-03-17 13:27   ` [PATCH 2/6] dm: introduce dm_accept_partial_bio Mike Snitzer
2014-03-17 17:08     ` Mikulas Patocka
2014-03-17 17:43       ` Mike Snitzer [this message]
2014-03-17 19:09         ` Mike Snitzer
2014-03-17 19:18           ` Mikulas Patocka
2014-03-17 19:47             ` Mike Snitzer
2014-03-17 22:45               ` Mikulas Patocka
2014-03-18  0:49                 ` Mike Snitzer
2014-03-18  1:26                   ` Mikulas Patocka

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=20140317174324.GA2285@redhat.com \
    --to=snitzer@redhat.com \
    --cc=agk@redhat.com \
    --cc=dm-devel@redhat.com \
    --cc=mpatocka@redhat.com \
    --cc=thornber@redhat.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.