Message ID | 20100105111436.GA2046@turtle.localnet |
---|---|
State | Accepted |
Commit | ff998793288b49a3b22d929bf8e56362320905ff |
Headers | show |
On Tue, 2010-01-05 at 11:14 +0000, Peter Horton wrote: > The in kernel copy of a volume's update marker is not initialised from the > volume table. > > Signed-off-by: Peter Horton <zero@colonel-panic.org> > > --- linux-2.6.32.orig/drivers/mtd/ubi/vtbl.c 2010-01-05 10:56:13.000000000 +0000 > +++ linux-2.6.32/drivers/mtd/ubi/vtbl.c 2010-01-05 10:57:03.000000000 +0000 > @@ -566,6 +566,7 @@ > vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs); > vol->alignment = be32_to_cpu(vtbl[i].alignment); > vol->data_pad = be32_to_cpu(vtbl[i].data_pad); > + vol->upd_marker = vtbl[i].upd_marker; > vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ? > UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME; > vol->name_len = be16_to_cpu(vtbl[i].name_len); Am I right that this means that whole "forbid using volume with unfinished update" functionality has not worked properly? Or I miss something? Looks like I should send this patch to -stable as well.
On 10/01/2010 09:42, Artem Bityutskiy wrote: > On Tue, 2010-01-05 at 11:14 +0000, Peter Horton wrote: >> The in kernel copy of a volume's update marker is not initialised from the >> volume table. >> >> Signed-off-by: Peter Horton<zero@colonel-panic.org> >> >> --- linux-2.6.32.orig/drivers/mtd/ubi/vtbl.c 2010-01-05 10:56:13.000000000 +0000 >> +++ linux-2.6.32/drivers/mtd/ubi/vtbl.c 2010-01-05 10:57:03.000000000 +0000 >> @@ -566,6 +566,7 @@ >> vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs); >> vol->alignment = be32_to_cpu(vtbl[i].alignment); >> vol->data_pad = be32_to_cpu(vtbl[i].data_pad); >> + vol->upd_marker = vtbl[i].upd_marker; >> vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ? >> UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME; >> vol->name_len = be16_to_cpu(vtbl[i].name_len); > > Am I right that this means that whole "forbid using volume with > unfinished update" functionality has not worked properly? Or I miss > something? Looks like I should send this patch to -stable as well. > The in kernel update marker was always clear on reboot, regardless of the flag in the volume table. Consequently reading from the volume worked after a reboot even after a failed update. P.
On Sun, 2010-01-10 at 09:57 +0000, Peter Horton wrote: > On 10/01/2010 09:42, Artem Bityutskiy wrote: > > On Tue, 2010-01-05 at 11:14 +0000, Peter Horton wrote: > >> The in kernel copy of a volume's update marker is not initialised from the > >> volume table. > >> > >> Signed-off-by: Peter Horton<zero@colonel-panic.org> > >> > >> --- linux-2.6.32.orig/drivers/mtd/ubi/vtbl.c 2010-01-05 10:56:13.000000000 +0000 > >> +++ linux-2.6.32/drivers/mtd/ubi/vtbl.c 2010-01-05 10:57:03.000000000 +0000 > >> @@ -566,6 +566,7 @@ > >> vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs); > >> vol->alignment = be32_to_cpu(vtbl[i].alignment); > >> vol->data_pad = be32_to_cpu(vtbl[i].data_pad); > >> + vol->upd_marker = vtbl[i].upd_marker; > >> vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ? > >> UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME; > >> vol->name_len = be16_to_cpu(vtbl[i].name_len); > > > > Am I right that this means that whole "forbid using volume with > > unfinished update" functionality has not worked properly? Or I miss > > something? Looks like I should send this patch to -stable as well. > > > > The in kernel update marker was always clear on reboot, regardless of > the flag in the volume table. Consequently reading from the volume > worked after a reboot even after a failed update. Oh my. This is the second patch which fixes a bad bug in the volume update code. It seems it was not used much. I personally do not use that functionality. The previous fix was this: http://git.infradead.org/ubi-2.6.git/commit/6afaf8a484cbbfd2ccf58a4e5396d1f280469789 Anyway, pushed your patch to ubi-2.6.git/master tree. I'll send it to Linus later, and to -stable. Thanks.
--- linux-2.6.32.orig/drivers/mtd/ubi/vtbl.c 2010-01-05 10:56:13.000000000 +0000 +++ linux-2.6.32/drivers/mtd/ubi/vtbl.c 2010-01-05 10:57:03.000000000 +0000 @@ -566,6 +566,7 @@ vol->reserved_pebs = be32_to_cpu(vtbl[i].reserved_pebs); vol->alignment = be32_to_cpu(vtbl[i].alignment); vol->data_pad = be32_to_cpu(vtbl[i].data_pad); + vol->upd_marker = vtbl[i].upd_marker; vol->vol_type = vtbl[i].vol_type == UBI_VID_DYNAMIC ? UBI_DYNAMIC_VOLUME : UBI_STATIC_VOLUME; vol->name_len = be16_to_cpu(vtbl[i].name_len);
The in kernel copy of a volume's update marker is not initialised from the volume table. Signed-off-by: Peter Horton <zero@colonel-panic.org>