All of lore.kernel.org
 help / color / mirror / Atom feed
From: Davidlohr Bueso <davidlohr@hp.com>
To: "Maciej Małecki" <me@mmalecki.com>
Cc: util-linux@vger.kernel.org
Subject: Re: [PATCH 1/2] fdisk: warn if opening a device in write mode failed
Date: Thu, 27 Feb 2014 18:32:11 -0800	[thread overview]
Message-ID: <1393554731.2899.15.camel@buesod1.americas.hpqcorp.net> (raw)
In-Reply-To: <1393471600-17777-1-git-send-email-me@mmalecki.com>

On Thu, 2014-02-27 at 04:26 +0100, Maciej Małecki wrote:
> Otherwise, `fdisk` fails silently with "Bad file descriptor" when
> writing the partition table.
> 
> Signed-off-by: Maciej Małecki <me@mmalecki.com>
> ---
>  libfdisk/src/context.c | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c
> index c405403..40f9080 100644
> --- a/libfdisk/src/context.c
> +++ b/libfdisk/src/context.c
> @@ -248,17 +248,26 @@ static int warn_wipe(struct fdisk_context *cxt)
>  int fdisk_context_assign_device(struct fdisk_context *cxt,
>  				const char *fname, int readonly)
>  {
> -	int fd;
> +	int fd, mode;
>  
>  	DBG(CONTEXT, dbgprint("assigning device %s", fname));
>  	assert(cxt);
>  
>  	reset_context(cxt);
>  
> -	if (readonly == 1 || (fd = open(fname, O_RDWR|O_CLOEXEC)) < 0) {
> -		if ((fd = open(fname, O_RDONLY|O_CLOEXEC)) < 0)
> +retry:
> +	mode = (readonly ? O_RDONLY : O_RDWR) | O_CLOEXEC;
> +	fd = open(fname, mode);
> +	if (fd < 0) {
> +		if (readonly)
>  			return -errno;
> -		readonly = 1;
> +		else {
> +			fdisk_warn(cxt,
> +			    _("%s: opening device in read write mode failed"),
> +			    fname);
> +			readonly = 1;
> +			goto retry;
> +		}
>  	}

This is 1) obscenely ugly and 2) not the place for such message. There's
no reason to pollute output like this. Why do I care how the device is
opened when I'm not going to write anything to it?

The correct way is to do what you do in patch 2, inform the user that
the device is only for opened for reading and just skip the write
operation.

So, NAK for this patch.

Thanks,
Davidlohr



  parent reply	other threads:[~2014-02-28  2:32 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-27  3:26 [PATCH 1/2] fdisk: warn if opening a device in write mode failed Maciej Małecki
2014-02-27  3:26 ` [PATCH 2/2] fdisk: do not allow writing to a read-only device Maciej Małecki
2014-02-28  2:32 ` Davidlohr Bueso [this message]
2014-02-28 11:00   ` [PATCH 1/2] fdisk: warn if opening a device in write mode failed Maciej Małecki
2014-02-28 16:23     ` Phillip Susi
2014-02-28 18:18       ` Maciej Małecki
2014-02-28 18:27       ` Davidlohr Bueso
2014-02-28 19:18         ` Phillip Susi
2014-03-03  9:04           ` Karel Zak
2014-03-03 21:19             ` Maciej Małecki
2014-03-03 21:47               ` Phillip Susi
2014-03-21 13:10       ` Karel Zak
2014-03-03 21:14 ` [PATCH v2 1/3] fdisk: do not allow writing to a read-only device Maciej Małecki
2014-03-03 21:14   ` [PATCH v2 2/3] libfdisk: remove `O_RDONLY` fallback mode when opening device Maciej Małecki
2014-03-03 21:14   ` [PATCH v2 3/3] fdisk: retry opening device in read-only mode Maciej Małecki

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=1393554731.2899.15.camel@buesod1.americas.hpqcorp.net \
    --to=davidlohr@hp.com \
    --cc=me@mmalecki.com \
    --cc=util-linux@vger.kernel.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.