From: NeilBrown <neilb@suse.de>
To: Adam Kwolek <adam.kwolek@intel.com>
Cc: linux-raid@vger.kernel.org, dan.j.williams@intel.com,
ed.ciechanowski@intel.com, wojciech.neubauer@intel.com
Subject: Re: [PATCH] imsm: FIX: spare cannot be added
Date: Tue, 25 Jan 2011 07:58:56 +1100 [thread overview]
Message-ID: <20110125075856.1b2e5cd6@notabene.brown> (raw)
In-Reply-To: <20110114121304.14523.87734.stgit@gklab-128-013.igk.intel.com>
On Fri, 14 Jan 2011 13:13:04 +0100 Adam Kwolek <adam.kwolek@intel.com> wrote:
> When Manage.c adds spare, it calls write_init_super() and this function
> is responsible for closing disk handle (Manage.c:812).
> For imsm case this handle is reused for managing this disk and handle
> (due to this it is not closed).
> As handle was opened with flag O_EXCL, adding disk to md fails on writing
> to new_dev (md cannot set lock on device).
> To resolve situation close current handle and open new one without O_EXCL flag.
>
> Signed-off-by: Anna Czarnowska <anna.czarnowska@intel.com>
> Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
> ---
Thanks for the patch.
I think the real problem is that write_init_super show not be closing
the fds. That seemed to make sense once, but it really doesn't now.
So I have:
- made sure that free_super always closed the fds
- stopped write_init_super from ever closing fds
- added a few more calls to free_super.
In particular, the bug you found is now simply fixed by calling
free_super before calling sysfs_add_disk.
Thanks,
NeilBrown
>
> super-intel.c | 9 +++++++++
> 1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/super-intel.c b/super-intel.c
> index 4cbb070..4e1be5d 100644
> --- a/super-intel.c
> +++ b/super-intel.c
> @@ -3714,6 +3714,7 @@ static int mgmt_disk(struct supertype *st)
> struct intel_super *super = st->sb;
> size_t len;
> struct imsm_update_add_remove_disk *u;
> + struct dl *d;
>
> if (!super->disk_mgmt_list)
> return 0;
> @@ -3729,6 +3730,14 @@ static int mgmt_disk(struct supertype *st)
> u->type = update_add_remove_disk;
> append_metadata_update(st, u, len);
>
> + for (d = super->disk_mgmt_list; d ; d = d->next) {
> + char buf[PATH_MAX];
> +
> + close(d->fd);
> + sprintf(buf, "%d:%d", d->major, d->minor);
> + d->fd = dev_open(buf, O_RDWR | O_DIRECT);
> + }
> +
> return 0;
> }
>
prev parent reply other threads:[~2011-01-24 20:58 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-14 12:13 [PATCH] imsm: FIX: spare cannot be added Adam Kwolek
2011-01-24 20:58 ` NeilBrown [this message]
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=20110125075856.1b2e5cd6@notabene.brown \
--to=neilb@suse.de \
--cc=adam.kwolek@intel.com \
--cc=dan.j.williams@intel.com \
--cc=ed.ciechanowski@intel.com \
--cc=linux-raid@vger.kernel.org \
--cc=wojciech.neubauer@intel.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.