linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.de>
To: Martin Wilck <mwilck@arcor.de>
Cc: linux-raid@vger.kernel.org
Subject: Re: [PATCH 05/27] DDF: Implement store_super_ddf
Date: Mon, 15 Jul 2013 15:31:41 +1000	[thread overview]
Message-ID: <20130715153141.4ac1cef9@notabene.brown> (raw)
In-Reply-To: <51DD9BD4.1090208@arcor.de>

[-- Attachment #1: Type: text/plain, Size: 4106 bytes --]

On Wed, 10 Jul 2013 19:37:24 +0200 Martin Wilck <mwilck@arcor.de> wrote:

> Hi Neil,
> 
> >> This patch implements the previously unsupported case where
> >> store_super_ddf is called with a non-empty superblock.
> >>
> >> For DDF, writing meta data to just one disk makes no sense.
> >> We would run the risk of writing inconsistent meta data
> >> to the devices. So just call __write_init_super_ddf and
> >> write to all devices, including the one passed by the caller.
> >>
> >> This patch assumes that the device to store the superblock on
> >> has already been added to the DDF structure. Otherwise, an
> >> error message will be emitted.
> >>
> >> Signed-off-by: Martin Wilck <mwilck@arcor.de>
> > 
> > I'm not sure I really like this.  If mdadm is calling ->store_super, then it
> > wants to write to just one device.  It will quite possibly call
> > ->store_super on all devices, and with your change that will write to all
> > devices multiple times.
> > So maybe a different interface is needed?
> 
> The point is the sequence number handling. If the sequence number
> increases, it would be dangerous to write only one superblock.

->store_super should not change the sequence number (I think).  Its purpose
is to fix up the metadata in some way, typically so that a failed array
doesn't look like it is failed any more, so it can be assembled.
It should really just write back exactly the same superblock except for
whatever changes were explicitly requested via "update_super" (plus checksums
of course).

> 
> But perhaps it can be done otherwise, I need to examine that further.
> First I need a clear understanding what this API is used for.
> 
> > What is the big-picture effect of this patch?  What mdadm function now works
> > that didn't work before?
> 
> To be honest, I don't know. I came up with this patch when scanning
> through the code looking for possible problems. This is not necessary to
> make mdadm -e ddf -C -l10 work.

I've reverted it then - I really don't think it is wanted.

Thanks,
NeilBrown


> 
> Martin
> 
> > 
> > Thanks,
> > NeilBrown
> > 
> > 
> > 
> >> ---
> >>  super-ddf.c |   41 +++++++++++++++++++++++++++++++++++------
> >>  1 files changed, 35 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/super-ddf.c b/super-ddf.c
> >> index b806949..b3c846d 100644
> >> --- a/super-ddf.c
> >> +++ b/super-ddf.c
> >> @@ -3471,15 +3471,44 @@ static int store_super_ddf(struct supertype *st, int fd)
> >>  	if (!ddf)
> >>  		return 1;
> >>  
> >> -	/* ->dlist and ->conflist will be set for updates, currently not
> >> -	 * supported
> >> -	 */
> >> -	if (ddf->dlist || ddf->conflist)
> >> -		return 1;
> >> -
> >>  	if (!get_dev_size(fd, NULL, &dsize))
> >>  		return 1;
> >>  
> >> +	if (ddf->dlist || ddf->conflist) {
> >> +		struct stat sta;
> >> +		struct dl *dl;
> >> +		int ofd, ret;
> >> +
> >> +		if (fstat(fd, &sta) == -1 || !S_ISBLK(sta.st_mode)) {
> >> +			pr_err("%s: file descriptor for invalid device\n",
> >> +			       __func__);
> >> +			return 1;
> >> +		}
> >> +		for (dl = ddf->dlist; dl; dl = dl->next)
> >> +			if (dl->major == (int)major(sta.st_rdev) &&
> >> +			    dl->minor == (int)minor(sta.st_rdev))
> >> +				break;
> >> +		if (!dl) {
> >> +			pr_err("%s: couldn't find disk %d/%d\n", __func__,
> >> +			       (int)major(sta.st_rdev),
> >> +			       (int)minor(sta.st_rdev));
> >> +			return 1;
> >> +		}
> >> +		/*
> >> +		   For DDF, writing to just one disk makes no sense.
> >> +		   We would run the risk of writing inconsistent meta data
> >> +		   to the devices. So just call __write_init_super_ddf and
> >> +		   write to all devices, including this one.
> >> +		   Use the fd passed to this function, just in case dl->fd
> >> +		   is invalid.
> >> +		 */
> >> +		ofd = dl->fd;
> >> +		dl->fd = fd;
> >> +		ret =  __write_init_super_ddf(st);
> >> +		dl->fd = ofd;
> >> +		return ret;
> >> +	}
> >> +
> >>  	if (posix_memalign(&buf, 512, 512) != 0)
> >>  		return 1;
> >>  	memset(buf, 0, 512);
> > 


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

  reply	other threads:[~2013-07-15  5:31 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-03 20:27 DDF/RAID10 patch series mwilck
2013-07-03 20:27 ` [PATCH 01/27] DDF (cleanup): use a common macro for failed searches mwilck
2013-07-03 20:27 ` [PATCH 02/27] DDF: check_secondary: fix treatment of missing BVDs mwilck
2013-07-03 20:27 ` [PATCH 03/27] DDF: load_ddf_headers: use secondary header as fallback mwilck
2013-07-08  5:43   ` NeilBrown
2013-07-08 20:56     ` Martin Wilck
2013-07-03 20:27 ` [PATCH 04/27] DDF: handle "open flag" according to spec mwilck
2013-07-03 20:27 ` [PATCH 05/27] DDF: Implement store_super_ddf mwilck
2013-07-08  5:48   ` NeilBrown
2013-07-10 17:37     ` Martin Wilck
2013-07-15  5:31       ` NeilBrown [this message]
2013-07-18 18:48         ` [PATCH 1/3] DDF: increase seq number in ddf_set_updates_pending mwilck
2013-07-18 18:49         ` [PATCH 2/3] DDF: make "null_aligned" a static buffer mwilck
2013-07-18 18:49         ` [PATCH 3/3] DDF: factor out writing super block to single disk mwilck
2013-07-18 18:51         ` [PATCH 05/27] DDF: Implement store_super_ddf Martin Wilck
2013-07-03 20:27 ` [PATCH 06/27] DDF: ddf_open_new: implement minimal consistency check mwilck
2013-07-03 20:27 ` [PATCH 07/27] DDF: find_vdcr: account for secondary RAID level mwilck
2013-07-08  6:16   ` NeilBrown
2013-07-08 21:03     ` Martin Wilck
2013-07-03 20:27 ` [PATCH 08/27] DDF: ddf_set_disk: move status logic to separate function mwilck
2013-07-03 20:27 ` [PATCH 09/27] DDF: get_svd_state: Status logic for secondary RAID level mwilck
2013-07-03 20:27 ` [PATCH 10/27] DDF: allow empty slots in virt disk table mwilck
2013-07-03 20:27 ` [PATCH 11/27] DDF: layout_ddf2md: new DDF->md RAID layout conversion mwilck
2013-07-08  6:48   ` NeilBrown
2013-07-08 21:06     ` Martin Wilck
2013-07-03 20:27 ` [PATCH 12/27] DDF: layout_md2ddf: new md->DDF " mwilck
2013-07-08  6:28   ` NeilBrown
2013-07-03 20:27 ` [PATCH 13/27] DDF: Simplify allocation of "other BVDs" mwilck
2013-07-03 20:27 ` [PATCH 14/27] DDF: init_super_ddf_bvd: initialize other bvds mwilck
2013-07-03 20:27 ` [PATCH 15/27] DDF: validate_geometry_ddf: support RAID10 mwilck
2013-07-03 20:27 ` [PATCH 16/27] DDF: use LBA_OFFSET macro instead of lba_offset field mwilck
2013-07-03 20:27 ` [PATCH 17/27] DDF: get_extents: support secondary RAID level mwilck
2013-07-03 20:27 ` [PATCH 18/27] DDF: add_to_super_ddf: allow empty slots in phys disk table mwilck
2013-07-03 20:27 ` [PATCH 19/27] DDF: add_to_super_ddf: Use same amount of workspace as other disks mwilck
2013-07-03 20:28 ` [PATCH 20/27] DDF: add_to_super_ddf: RAID10 changes mwilck
2013-07-03 20:28 ` [PATCH 21/27] DDF: add_to_super_ddf_bvd: use get_svd_state() mwilck
2013-07-03 20:28 ` [PATCH 22/27] DDF: getinfo_super_ddf_bvd: lba_offset calculation for RAID10 mwilck
2013-07-03 20:28 ` [PATCH 23/27] DDF: guid_str: convenience function to print GUID for debugging mwilck
2013-07-03 20:28 ` [PATCH 24/27] DDF: ddf_set_array_state: more meaningful output mwilck
2013-07-03 20:28 ` [PATCH 25/27] DDF: ddf_process_update: handle update of conf records for SVD mwilck
2013-07-03 20:28 ` [PATCH 26/27] DDF: ddf_process_update: Fix vlist treatment for SVDs mwilck
2013-07-03 20:28 ` [PATCH 27/27] tests/10ddf-create: add RAID 10 array mwilck
2013-07-04 10:10 ` DDF/RAID10 patch series NeilBrown
2013-07-08  6:53 ` NeilBrown
2013-07-08 21:50 ` Fixes for the DDF " mwilck
2013-07-08 21:50 ` [PATCH 28/39] test/10-ddf-create: fix comments mwilck
2013-07-08 21:50 ` [PATCH 29/39] Monitor: Don't write metadata in inactive array state mwilck
2013-07-08 21:50 ` [PATCH 30/39] DDF: write_init_super_ddf: don't zero superblocks for subarrays mwilck
2013-07-08 21:50 ` [PATCH 31/39] DDF: implement kill_subarray mwilck
2013-07-08 21:50 ` [PATCH 32/39] DDF: getinfo_super_ddf_bvd: identify disk by refnum mwilck
2013-07-08 21:50 ` [PATCH 33/39] DDF: getinfo_super_ddf_bvd: fix raid_disk calculation mwilck
2013-07-08 21:50 ` [PATCH 34/39] DDF: fix endianness of refnum in debug messages mwilck
2013-07-08 21:50 ` [PATCH 35/39] DDF: add debug message in add_super_ddf_bvd mwilck
2013-07-08 21:50 ` [PATCH 36/39] DDF: ddf_process_update: add debug messages fore adding VDs mwilck
2013-07-08 21:50 ` [PATCH 37/39] DDF: guid_str: more readable output mwilck
2013-07-08 21:50 ` [PATCH 38/39] DDF: ddf_process_update: some more debug messages mwilck
2013-07-08 21:50 ` [PATCH 39/39] DDF: ddf_process_update: Fix updates for SVDs mwilck

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=20130715153141.4ac1cef9@notabene.brown \
    --to=neilb@suse.de \
    --cc=linux-raid@vger.kernel.org \
    --cc=mwilck@arcor.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).