From: Jean Delvare <jdelvare@suse.de>
To: Mike Christie <michaelc@cs.wisc.edu>
Cc: linux-scsi@vger.kernel.org, Chris Wright <chrisw@sous-sol.org>,
James Bottomley <James.Bottomley@hansenpartnership.com>
Subject: Re: [PATCH 7/7] libiscsi: fix iscsi pool error path
Date: Thu, 2 Apr 2009 16:02:55 +0200 [thread overview]
Message-ID: <200904021602.55587.jdelvare@suse.de> (raw)
In-Reply-To: <12386094933319-git-send-email-michaelc@cs.wisc.edu>
Hi Mike,
Sorry for the late answer, I have been traveling for the last 2 days.
Le mercredi 01 avril 2009, michaelc@cs.wisc.edu a écrit :
> From: Jean Delvare <jdelvare@suse.de>
>
> Le lundi 30 mars 2009, Chris Wright a écrit :
> > q->queue could be ERR_PTR(-ENOMEM) which will break unwinding
> > on error. Make iscsi_pool_free more defensive.
> >
>
> Making the freeing of q->queue dependent on q->pool being set looks
> really weird (although it is correct at the moment. But this seems
> to be fixable in a much simpler way.
>
> With the benefit that only the error case is slowed down. In both
> cases we have a problem if q->queue contains an error value but it's
> not -ENOMEM. Apparently this can't happen today, but it doesn't feel
> right to assume this will always be true. Maybe it's the right time
> to fix this as well.
>
> Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
> ---
> drivers/scsi/libiscsi.c | 4 +++-
> 1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
> index dfaa8ad..6896283 100644
> --- a/drivers/scsi/libiscsi.c
> +++ b/drivers/scsi/libiscsi.c
> @@ -1999,8 +1999,10 @@ iscsi_pool_init(struct iscsi_pool *q, int max, void ***items, int item_size)
>
> q->queue = kfifo_init((void*)q->pool, max * sizeof(void*),
> GFP_KERNEL, NULL);
> - if (q->queue == ERR_PTR(-ENOMEM))
> + if (IS_ERR(q->queue)) {
This indeed solves the problem I had underlined before, but
introduces a new one. Right now the only error returned by kfifo_init
is -ENOMEM. This may however change in the future, and then the
above code would silently convert the other error code to -ENOMEM.
This might make it difficult to trace errors.
I know this is all just theoretical, at the moment your code is
correct, but I don't much like relying on assumptions which are not
guaranteed to last. So I would rather cleanly transmit the error code
up to the caller, or change the calling convention of kfifo_init() to
return NULL on error. The former will add a few lines of code, the
latter will result in faster code but is obviously more intrusive.
The latter might also be undesirable for some reason I am
overlooking; I'm really not familiar with kfifo.
Or you can consider I am too perfectionist and ignore me and go with
the current fix, that's also fine with me ;)
> + q->queue = NULL;
> goto enomem;
> + }
>
> for (i = 0; i < max; i++) {
> q->pool[i] = kzalloc(item_size, GFP_KERNEL);
--
Jean Delvare
Suse L3
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2009-04-02 14:02 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-01 18:11 iscsi bugfixes and cleanups michaelc
2009-04-01 18:11 ` [PATCH 1/7] cxgb3i - subscribe to error notification from cxgb3 driver michaelc
2009-04-01 18:11 ` [PATCH 2/7] cxgb3i - re-initialize ddp settings after chip reset michaelc
2009-04-01 18:11 ` [PATCH 3/7] cxgb3i - re-read ddp settings information " michaelc
2009-04-01 18:11 ` [PATCH 4/7] cxgb3i - close all tcp connections upon " michaelc
2009-04-01 18:11 ` [PATCH 5/7] cxgb3i -- merge cxgb3i_ddp into cxgb3i module michaelc
2009-04-01 18:11 ` [PATCH 6/7] cxgb3i: call ddp release function directly michaelc
2009-04-01 18:11 ` [PATCH 7/7] libiscsi: fix iscsi pool error path michaelc
2009-04-02 14:02 ` Jean Delvare [this message]
2009-04-02 15:15 ` Mike Christie
2009-04-02 15:27 ` Chris Wright
2009-04-02 16:05 ` Mike Christie
2009-04-02 17:26 ` Chris Wright
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=200904021602.55587.jdelvare@suse.de \
--to=jdelvare@suse.de \
--cc=James.Bottomley@hansenpartnership.com \
--cc=chrisw@sous-sol.org \
--cc=linux-scsi@vger.kernel.org \
--cc=michaelc@cs.wisc.edu \
/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.