On Wed, May 11, 2022 at 9:14 AM Xiao Ni <xni@xxxxxxxxxx> wrote: > > On Mon, May 9, 2022 at 2:24 PM Song Liu <song@xxxxxxxxxx> wrote: > > > > Hi Xiao, > > > > Thanks for the patch! > > > > On Thu, Apr 28, 2022 at 10:09 PM Xiao Ni <xni@xxxxxxxxxx> wrote: > > > > > > > prefix the subject with "md:", and provide more details. > > Hi Song > > Thanks for pointing about this and I will add "md:" in v2. > > > > > It panics when reshaping from raid0 to other raid levels. raid0 sets > > > mddev->private to NULL. It's the reason that causes the problem. > > > Function level_store finds new pers and create new conf, then it > > > calls oldpers->free. In oldpers->free, raid0 sets mddev->private > > > to NULL again. And __md_stop is the right position to set > > > mddev->private to NULL. > > > > We need more details here: the panic backtrace, and why it panics. > > raid5_free also sets private to NULL. Does it has the same problem? > > The backtrace will be added in v2. > > I don't find raid5_free sets mddev->private to NULL. > The normal process of stopping a raid should be like this: > > do_md_stop > | > __md_stop (pers->free(); mddev->private=NULL) > | > md_free (free biosets of mddev; free mddev) > > personality raid doesn't set mddev->private to NULL. __md_stop does this job. > Reshaping from raid0 to raid other raid level doesn't stop the raid. > The new raid > will go on working. Now raid0_free->free_conf sets mddev->private to NULL during > reshape. The new raid can't work anymore. It will panic when dereference > mddev->private because of NULL pointer dereference. Got it. Thanks for the explanation. Thanks, Song