* [PATCH] FIX: Changes in '0' case for reshape position verification
@ 2012-02-16 13:16 Adam Kwolek
2012-02-20 3:14 ` NeilBrown
0 siblings, 1 reply; 2+ messages in thread
From: Adam Kwolek @ 2012-02-16 13:16 UTC (permalink / raw)
To: neilb
Cc: linux-raid, ed.ciechanowski, marcin.labun, dan.j.williams,
anna.czarnowska
Reading sysfs entry that is '0' long should cause an error.
Reshape position cannot be empty.
Absence of reshape position should be ignored. It is possible
that we are about raid0 reshape continuation and it is before takeover.
This means that according metadata (changed by mdmon) it should be reshaped
but md knows nothing about it at this moment. Reshape continuation
in reshape_array() will change it to raid4 and reshape position appears
in sysfs.
Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
---
Grow.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/Grow.c b/Grow.c
index 53a7cad..239b50d 100644
--- a/Grow.c
+++ b/Grow.c
@@ -1876,9 +1876,12 @@ static int verify_reshape_position(struct mdinfo *info, int level)
{
int ret_val = 0;
char buf[40];
+ int rv;
/* read sync_max, failure can mean raid0 array */
- if (sysfs_get_str(info, NULL, "sync_max", buf, 40) > 0) {
+ rv = sysfs_get_str(info, NULL, "sync_max", buf, 40);
+
+ if (rv > 0) {
char *ep;
unsigned long long position = strtoull(buf, &ep, 0);
@@ -1906,6 +1909,11 @@ static int verify_reshape_position(struct mdinfo *info, int level)
ret_val = 1;
}
}
+ } else if (rv == 0) {
+ /* for valid sysfs entry, 0-length content
+ * should be indicated as error
+ */
+ ret_val = -1;
}
return ret_val;
@@ -3975,7 +3983,7 @@ int Grow_continue_command(char *devname, int fd,
* correct position
*/
if (verify_reshape_position(content,
- map_name(pers, mdstat->level)) <= 0) {
+ map_name(pers, mdstat->level)) < 0) {
ret_val = 1;
goto Grow_continue_command_exit;
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] FIX: Changes in '0' case for reshape position verification
2012-02-16 13:16 [PATCH] FIX: Changes in '0' case for reshape position verification Adam Kwolek
@ 2012-02-20 3:14 ` NeilBrown
0 siblings, 0 replies; 2+ messages in thread
From: NeilBrown @ 2012-02-20 3:14 UTC (permalink / raw)
To: Adam Kwolek
Cc: linux-raid, ed.ciechanowski, marcin.labun, dan.j.williams,
anna.czarnowska
[-- Attachment #1: Type: text/plain, Size: 2129 bytes --]
On Thu, 16 Feb 2012 14:16:04 +0100 Adam Kwolek <adam.kwolek@intel.com> wrote:
> Reading sysfs entry that is '0' long should cause an error.
> Reshape position cannot be empty.
>
> Absence of reshape position should be ignored. It is possible
> that we are about raid0 reshape continuation and it is before takeover.
> This means that according metadata (changed by mdmon) it should be reshaped
> but md knows nothing about it at this moment. Reshape continuation
> in reshape_array() will change it to raid4 and reshape position appears
> in sysfs.
>
> Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Thanks. Applied.
NeilBrown
> ---
>
> Grow.c | 12 ++++++++++--
> 1 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/Grow.c b/Grow.c
> index 53a7cad..239b50d 100644
> --- a/Grow.c
> +++ b/Grow.c
> @@ -1876,9 +1876,12 @@ static int verify_reshape_position(struct mdinfo *info, int level)
> {
> int ret_val = 0;
> char buf[40];
> + int rv;
>
> /* read sync_max, failure can mean raid0 array */
> - if (sysfs_get_str(info, NULL, "sync_max", buf, 40) > 0) {
> + rv = sysfs_get_str(info, NULL, "sync_max", buf, 40);
> +
> + if (rv > 0) {
> char *ep;
> unsigned long long position = strtoull(buf, &ep, 0);
>
> @@ -1906,6 +1909,11 @@ static int verify_reshape_position(struct mdinfo *info, int level)
> ret_val = 1;
> }
> }
> + } else if (rv == 0) {
> + /* for valid sysfs entry, 0-length content
> + * should be indicated as error
> + */
> + ret_val = -1;
> }
>
> return ret_val;
> @@ -3975,7 +3983,7 @@ int Grow_continue_command(char *devname, int fd,
> * correct position
> */
> if (verify_reshape_position(content,
> - map_name(pers, mdstat->level)) <= 0) {
> + map_name(pers, mdstat->level)) < 0) {
> ret_val = 1;
> goto Grow_continue_command_exit;
> }
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-02-20 3:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-16 13:16 [PATCH] FIX: Changes in '0' case for reshape position verification Adam Kwolek
2012-02-20 3:14 ` NeilBrown
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).