* [PATCH 0/2] imsm: add extra handling of sync_action and sync_completed
@ 2016-06-16 9:31 Alexey Obitotskiy
2016-06-16 9:31 ` [PATCH 1/2] imsm: add handling of sync_action is equal to 'idle' Alexey Obitotskiy
2016-06-16 9:31 ` [PATCH 2/2] imsm: properly handle values of sync_completed Alexey Obitotskiy
0 siblings, 2 replies; 5+ messages in thread
From: Alexey Obitotskiy @ 2016-06-16 9:31 UTC (permalink / raw)
To: jes.sorensen; +Cc: linux-raid
This patchset fixes issues with IMSM reshape completion
or interruption.
After sync completion sync_action set to 'idle' and must be treated
as normal wait_for_reshape_imsm termination. During sync or after
sync finished sync_completed can be set to 'disabled' or 'none' and
must be handled respectively.
Alexey Obitotskiy (2):
imsm: add handling of sync_action is equal to 'idle'
imsm: properly handle values of sync_completed
super-intel.c | 40 +++++++++++++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 3 deletions(-)
--
2.7.4
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] imsm: add handling of sync_action is equal to 'idle'
2016-06-16 9:31 [PATCH 0/2] imsm: add extra handling of sync_action and sync_completed Alexey Obitotskiy
@ 2016-06-16 9:31 ` Alexey Obitotskiy
2016-06-16 17:59 ` Jes Sorensen
2016-06-16 9:31 ` [PATCH 2/2] imsm: properly handle values of sync_completed Alexey Obitotskiy
1 sibling, 1 reply; 5+ messages in thread
From: Alexey Obitotskiy @ 2016-06-16 9:31 UTC (permalink / raw)
To: jes.sorensen; +Cc: linux-raid
After resync is stopped sync_action value become 'idle'.
We treat this case as normal termination of waiting, not as error.
Signed-off-by: Alexey Obitotskiy <aleksey.obitotskiy@intel.com>
Reviewed-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
---
super-intel.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/super-intel.c b/super-intel.c
index 7e2860c..7950bef 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -10423,6 +10423,8 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata)
if (sysfs_get_str(sra, NULL, "sync_action",
action, 20) > 0 &&
strncmp(action, "reshape", 7) != 0) {
+ if (strncmp(action, "idle", 4) == 0)
+ break;
close(fd);
return -1;
}
@@ -10432,9 +10434,9 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata)
return 1;
}
} while (completed < position_to_set);
+
close(fd);
return 0;
-
}
/*******************************************************************************
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] imsm: properly handle values of sync_completed
2016-06-16 9:31 [PATCH 0/2] imsm: add extra handling of sync_action and sync_completed Alexey Obitotskiy
2016-06-16 9:31 ` [PATCH 1/2] imsm: add handling of sync_action is equal to 'idle' Alexey Obitotskiy
@ 2016-06-16 9:31 ` Alexey Obitotskiy
2016-06-16 17:59 ` Jes Sorensen
1 sibling, 1 reply; 5+ messages in thread
From: Alexey Obitotskiy @ 2016-06-16 9:31 UTC (permalink / raw)
To: jes.sorensen; +Cc: linux-raid
The sync_completed can be set to such values:
- two numbers of processed sectors and total during synchronization,
separated with '/';
- 'none' if synchronization process is stopped;
- 'delayed' if synchronization process is delayed.
Handle value of sync_completed not only as numbers but
also check for 'none' and 'delayed'.
Signed-off-by: Alexey Obitotskiy <aleksey.obitotskiy@intel.com>
Reviewed-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
---
super-intel.c | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/super-intel.c b/super-intel.c
index 7950bef..b401f3c 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -10363,6 +10363,33 @@ exit_imsm_reshape_super:
return ret_val;
}
+#define COMPLETED_OK 0
+#define COMPLETED_NONE 1
+#define COMPLETED_DELAYED 2
+
+static int read_completed(int fd, unsigned long long *val)
+{
+ int ret;
+ char buf[50];
+
+ ret = sysfs_fd_get_str(fd, buf, 50);
+ if (ret < 0)
+ return ret;
+
+ ret = COMPLETED_OK;
+ if (strncmp(buf, "none", 4) == 0) {
+ ret = COMPLETED_NONE;
+ } else if (strncmp(buf, "delayed", 7) == 0) {
+ ret = COMPLETED_DELAYED;
+ } else {
+ char *ep;
+ *val = strtoull(buf, &ep, 0);
+ if (ep == buf || (*ep != 0 && *ep != '\n' && *ep != ' '))
+ ret = -1;
+ }
+ return ret;
+}
+
/*******************************************************************************
* Function: wait_for_reshape_imsm
* Description: Function writes new sync_max value and waits until
@@ -10417,7 +10444,9 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata)
}
do {
+ int rc;
char action[20];
+
int timeout = 3000;
sysfs_wait(fd, &timeout);
if (sysfs_get_str(sra, NULL, "sync_action",
@@ -10428,11 +10457,14 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata)
close(fd);
return -1;
}
- if (sysfs_fd_get_ll(fd, &completed) < 0) {
+
+ rc = read_completed(fd, &completed);
+ if (rc < 0) {
dprintf("cannot read reshape_position (in loop)\n");
close(fd);
return 1;
- }
+ } else if (rc == COMPLETED_NONE)
+ break;
} while (completed < position_to_set);
close(fd);
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] imsm: add handling of sync_action is equal to 'idle'
2016-06-16 9:31 ` [PATCH 1/2] imsm: add handling of sync_action is equal to 'idle' Alexey Obitotskiy
@ 2016-06-16 17:59 ` Jes Sorensen
0 siblings, 0 replies; 5+ messages in thread
From: Jes Sorensen @ 2016-06-16 17:59 UTC (permalink / raw)
To: Alexey Obitotskiy; +Cc: linux-raid
Alexey Obitotskiy <aleksey.obitotskiy@intel.com> writes:
> After resync is stopped sync_action value become 'idle'.
> We treat this case as normal termination of waiting, not as error.
>
> Signed-off-by: Alexey Obitotskiy <aleksey.obitotskiy@intel.com>
> Reviewed-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> ---
> super-intel.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
Applied!
Thanks,
Jes
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] imsm: properly handle values of sync_completed
2016-06-16 9:31 ` [PATCH 2/2] imsm: properly handle values of sync_completed Alexey Obitotskiy
@ 2016-06-16 17:59 ` Jes Sorensen
0 siblings, 0 replies; 5+ messages in thread
From: Jes Sorensen @ 2016-06-16 17:59 UTC (permalink / raw)
To: Alexey Obitotskiy; +Cc: linux-raid
Alexey Obitotskiy <aleksey.obitotskiy@intel.com> writes:
> The sync_completed can be set to such values:
> - two numbers of processed sectors and total during synchronization,
> separated with '/';
> - 'none' if synchronization process is stopped;
> - 'delayed' if synchronization process is delayed.
> Handle value of sync_completed not only as numbers but
> also check for 'none' and 'delayed'.
>
> Signed-off-by: Alexey Obitotskiy <aleksey.obitotskiy@intel.com>
> Reviewed-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> ---
> super-intel.c | 36 ++++++++++++++++++++++++++++++++++--
> 1 file changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/super-intel.c b/super-intel.c
> index 7950bef..b401f3c 100644
> --- a/super-intel.c
> +++ b/super-intel.c
> @@ -10363,6 +10363,33 @@ exit_imsm_reshape_super:
> return ret_val;
> }
>
> +#define COMPLETED_OK 0
> +#define COMPLETED_NONE 1
> +#define COMPLETED_DELAYED 2
> +
> +static int read_completed(int fd, unsigned long long *val)
> +{
> + int ret;
> + char buf[50];
> +
> + ret = sysfs_fd_get_str(fd, buf, 50);
> + if (ret < 0)
> + return ret;
> +
> + ret = COMPLETED_OK;
> + if (strncmp(buf, "none", 4) == 0) {
> + ret = COMPLETED_NONE;
> + } else if (strncmp(buf, "delayed", 7) == 0) {
> + ret = COMPLETED_DELAYED;
> + } else {
> + char *ep;
> + *val = strtoull(buf, &ep, 0);
> + if (ep == buf || (*ep != 0 && *ep != '\n' && *ep != ' '))
> + ret = -1;
> + }
> + return ret;
> +}
> +
> /*******************************************************************************
> * Function: wait_for_reshape_imsm
> * Description: Function writes new sync_max value and waits until
> @@ -10417,7 +10444,9 @@ int wait_for_reshape_imsm(struct mdinfo *sra, int ndata)
> }
>
> do {
> + int rc;
> char action[20];
> +
> int timeout = 3000;
> sysfs_wait(fd, &timeout);
> if (sysfs_get_str(sra, NULL, "sync_action",
Nit - you shouldn't have a blank line between variable declaration, but
rather put it between the declarations and the code itself. I fixed it
up for you.
Applied!
Cheers,
Jes
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-06-16 17:59 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-16 9:31 [PATCH 0/2] imsm: add extra handling of sync_action and sync_completed Alexey Obitotskiy
2016-06-16 9:31 ` [PATCH 1/2] imsm: add handling of sync_action is equal to 'idle' Alexey Obitotskiy
2016-06-16 17:59 ` Jes Sorensen
2016-06-16 9:31 ` [PATCH 2/2] imsm: properly handle values of sync_completed Alexey Obitotskiy
2016-06-16 17:59 ` Jes Sorensen
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).