* [PATCH] IMSM: Clear migration record on disks more often
@ 2015-01-20 12:52 Pawel Baldysiak
2015-01-29 3:13 ` NeilBrown
0 siblings, 1 reply; 2+ messages in thread
From: Pawel Baldysiak @ 2015-01-20 12:52 UTC (permalink / raw)
To: neilb; +Cc: linux-raid, pawel.baldysiak, artur.paszkiewicz
Migration record is not always cleared after successful migration. This can
block another reshape from being started. Migration will not be continued via
systemd service due to error in verifying reshape position. This patch added
clearing migration record when disk is added to container, and after successful
migration.
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
---
super-intel.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/super-intel.c b/super-intel.c
index 4c53019..2406991 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -5055,6 +5055,14 @@ static int add_to_super_imsm(struct supertype *st, mdu_disk_info_t *dk,
}
get_dev_size(fd, NULL, &size);
+ /* clear migr_rec when adding disk to container */
+ memset(super->migr_rec_buf, 0, MIGR_REC_BUF_SIZE);
+ if (lseek64(fd, size - 512, SEEK_SET) >= 0) {
+ if (write(fd, super->migr_rec_buf,
+ MIGR_REC_BUF_SIZE) != MIGR_REC_BUF_SIZE)
+ perror("Write migr_rec failed");
+ }
+
size /= 512;
serialcpy(dd->disk.serial, dd->serial);
set_total_blocks(&dd->disk, size);
@@ -10648,6 +10656,23 @@ static int imsm_manage_reshape(
}
+ /* clear migr_rec on disks after successful migration */
+ struct dl *d;
+
+ memset(super->migr_rec_buf, 0, MIGR_REC_BUF_SIZE);
+ for (d = super->disks; d; d = d->next) {
+ if (d->index < 0 || is_failed(&d->disk))
+ continue;
+ unsigned long long dsize;
+
+ get_dev_size(d->fd, NULL, &dsize);
+ if (lseek64(d->fd, dsize - 512, SEEK_SET) >= 0) {
+ if (write(d->fd, super->migr_rec_buf,
+ MIGR_REC_BUF_SIZE) != MIGR_REC_BUF_SIZE)
+ perror("Write migr_rec failed");
+ }
+ }
+
/* return '1' if done */
ret_val = 1;
abort:
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] IMSM: Clear migration record on disks more often
2015-01-20 12:52 [PATCH] IMSM: Clear migration record on disks more often Pawel Baldysiak
@ 2015-01-29 3:13 ` NeilBrown
0 siblings, 0 replies; 2+ messages in thread
From: NeilBrown @ 2015-01-29 3:13 UTC (permalink / raw)
To: Pawel Baldysiak; +Cc: linux-raid, artur.paszkiewicz
[-- Attachment #1: Type: text/plain, Size: 2059 bytes --]
On Tue, 20 Jan 2015 13:52:25 +0100 Pawel Baldysiak
<pawel.baldysiak@intel.com> wrote:
> Migration record is not always cleared after successful migration. This can
> block another reshape from being started. Migration will not be continued via
> systemd service due to error in verifying reshape position. This patch added
> clearing migration record when disk is added to container, and after successful
> migration.
>
> Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> ---
> super-intel.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/super-intel.c b/super-intel.c
> index 4c53019..2406991 100644
> --- a/super-intel.c
> +++ b/super-intel.c
> @@ -5055,6 +5055,14 @@ static int add_to_super_imsm(struct supertype *st, mdu_disk_info_t *dk,
> }
>
> get_dev_size(fd, NULL, &size);
> + /* clear migr_rec when adding disk to container */
> + memset(super->migr_rec_buf, 0, MIGR_REC_BUF_SIZE);
> + if (lseek64(fd, size - 512, SEEK_SET) >= 0) {
> + if (write(fd, super->migr_rec_buf,
> + MIGR_REC_BUF_SIZE) != MIGR_REC_BUF_SIZE)
> + perror("Write migr_rec failed");
> + }
> +
> size /= 512;
> serialcpy(dd->disk.serial, dd->serial);
> set_total_blocks(&dd->disk, size);
> @@ -10648,6 +10656,23 @@ static int imsm_manage_reshape(
>
> }
>
> + /* clear migr_rec on disks after successful migration */
> + struct dl *d;
> +
> + memset(super->migr_rec_buf, 0, MIGR_REC_BUF_SIZE);
> + for (d = super->disks; d; d = d->next) {
> + if (d->index < 0 || is_failed(&d->disk))
> + continue;
> + unsigned long long dsize;
> +
> + get_dev_size(d->fd, NULL, &dsize);
> + if (lseek64(d->fd, dsize - 512, SEEK_SET) >= 0) {
> + if (write(d->fd, super->migr_rec_buf,
> + MIGR_REC_BUF_SIZE) != MIGR_REC_BUF_SIZE)
> + perror("Write migr_rec failed");
> + }
> + }
> +
> /* return '1' if done */
> ret_val = 1;
> abort:
Thanks.
I replaced both "size - 512" with "size - MIGR_REC_POSITION" and applied
the patch.
NeilBrown
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 811 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-01-29 3:13 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-20 12:52 [PATCH] IMSM: Clear migration record on disks more often Pawel Baldysiak
2015-01-29 3:13 ` NeilBrown
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.