Neil Brown changed bug 1033098
What Removed Added
Status NEW CONFIRMED

Comment # 3 on bug 1033098 from
Look in the strace for where process 1691 exits, and just before there we see:

open("/sys/block//md//sync_max", O_RDWR)

Clearly there is something wrong with that file name.  It should be
 /sys/block/md0/md//sync_max

Looking at earlier calls in the strace, and comparing with code in
Grow_continue_command, it is quiet easy to identify
1691  ioctl(3, GET_ARRAY_INFO, 0x7fff1181b040) = 0

then

1691  ioctl(3, GET_DISK_INFO, 0x7fff1181b020) = 0

and then the strace shows /dev/ being scanned by map_dev()
This continues to
1691  open("/dev/loop0", O_RDONLY|O_DIRECT) = 4

which matches
                        fd2 = dev_open(dv, O_RDONLY);
in the code.
A little later is the call
        if (verify_reshape_position(content, content->array.level) < 0) {

and it is verify_reshape_position() which tries to read sync_max, and fails.
It expects to find the array name (md0) in 'info' which is passed from the
variable 'content' which was set
                content = &array;

But array.sys_name is never set.

It should set by a call to sysfs_init()
The else branch of "if (st->ss->external == 0) {" in Grow_continue_command()
contains a call to sysfs_init(), but the 'then' branch doesn't.

Can you try adding a call like

                 sysfs_init(content, fd, NULL);
after
                 content = &array;
in Grow_continue_command(), and see if that fixes the problem?


You are receiving this mail because: