Message ID | 20200119215233.7292-1-richard@nod.at |
---|---|
State | Accepted |
Headers | show |
Series | ubifs: Fix ubifs_tnc_lookup() usage in do_kill_orphans() | expand |
Hi Richard, Could you CC this patch to stable? It fixes a serious problem that I am seeing on real devices (i.e. Linux not being able to mount its root filesystem after a power cut). Thanks. John Ogness On 2020-01-19, Richard Weinberger <richard@nod.at> wrote: > Orphans are allowed to point to deleted inodes. > So -ENOENT is not a fatal error. > > Reported-by: Кочетков Максим <fido_max@inbox.ru> > Reported-and-tested-by: "Christian Berger" <Christian.Berger@de.bosch.com> > Fixes: ee1438ce5dc4 ("ubifs: Check link count of inodes when killing orphans.") > Signed-off-by: Richard Weinberger <richard@nod.at> > --- > fs/ubifs/orphan.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c > index 54d6db61106f..2645917360b9 100644 > --- a/fs/ubifs/orphan.c > +++ b/fs/ubifs/orphan.c > @@ -688,14 +688,14 @@ static int do_kill_orphans(struct ubifs_info *c, struct ubifs_scan_leb *sleb, > > ino_key_init(c, &key1, inum); > err = ubifs_tnc_lookup(c, &key1, ino); > - if (err) > + if (err && err != -ENOENT) > goto out_free; > > /* > * Check whether an inode can really get deleted. > * linkat() with O_TMPFILE allows rebirth of an inode. > */ > - if (ino->nlink == 0) { > + if (err == 0 && ino->nlink == 0) { > dbg_rcvry("deleting orphaned inode %lu", > (unsigned long)inum);
Hello John, ----- Ursprüngliche Mail ----- > Von: "John Ogness" <john.ogness@linutronix.de> > An: "richard" <richard@nod.at> > CC: "linux-mtd" <linux-mtd@lists.infradead.org>, "linux-kernel" <linux-kernel@vger.kernel.org> > Gesendet: Mittwoch, 29. April 2020 16:56:31 > Betreff: Re: [PATCH] ubifs: Fix ubifs_tnc_lookup() usage in do_kill_orphans() > Hi Richard, > > Could you CC this patch to stable? It fixes a serious problem that I am > seeing on real devices (i.e. Linux not being able to mount its root > filesystem after a power cut). Thanks. It has a Fixes-Tag, so it should make it into stable. Thanks, //richard
----- Ursprüngliche Mail ----- > Von: "John Ogness" <john.ogness@linutronix.de> > An: "richard" <richard@nod.at> > CC: "linux-mtd" <linux-mtd@lists.infradead.org>, "linux-kernel" <linux-kernel@vger.kernel.org> > Gesendet: Mittwoch, 29. April 2020 16:56:31 > Betreff: Re: [PATCH] ubifs: Fix ubifs_tnc_lookup() usage in do_kill_orphans() > Hi Richard, > > Could you CC this patch to stable? It fixes a serious problem that I am > seeing on real devices (i.e. Linux not being able to mount its root > filesystem after a power cut). Thanks. Just checked again, better ask stable maintainers. :-) Stable maintainers, can you please make sure this patch will make it into stable? The upstream commit is: 4ab25ac8b2b5 ("ubifs: Fix ubifs_tnc_lookup() usage in do_kill_orphans()") I always thought havings a Fixes-Tag is enough to make sure it will get picked up. Isn't this the case? Thanks, //richard > John Ogness > > On 2020-01-19, Richard Weinberger <richard@nod.at> wrote: >> Orphans are allowed to point to deleted inodes. >> So -ENOENT is not a fatal error. >> >> Reported-by: Кочетков Максим <fido_max@inbox.ru> >> Reported-and-tested-by: "Christian Berger" <Christian.Berger@de.bosch.com> >> Fixes: ee1438ce5dc4 ("ubifs: Check link count of inodes when killing orphans.") >> Signed-off-by: Richard Weinberger <richard@nod.at> >> --- >> fs/ubifs/orphan.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c >> index 54d6db61106f..2645917360b9 100644 >> --- a/fs/ubifs/orphan.c >> +++ b/fs/ubifs/orphan.c >> @@ -688,14 +688,14 @@ static int do_kill_orphans(struct ubifs_info *c, struct >> ubifs_scan_leb *sleb, >> >> ino_key_init(c, &key1, inum); >> err = ubifs_tnc_lookup(c, &key1, ino); >> - if (err) >> + if (err && err != -ENOENT) >> goto out_free; >> >> /* >> * Check whether an inode can really get deleted. >> * linkat() with O_TMPFILE allows rebirth of an inode. >> */ >> - if (ino->nlink == 0) { >> + if (err == 0 && ino->nlink == 0) { >> dbg_rcvry("deleting orphaned inode %lu", > > (unsigned long)inum);
On Wed, Apr 29, 2020 at 08:51:06PM +0200, Richard Weinberger wrote: > ----- Ursprüngliche Mail ----- > > Von: "John Ogness" <john.ogness@linutronix.de> > > An: "richard" <richard@nod.at> > > CC: "linux-mtd" <linux-mtd@lists.infradead.org>, "linux-kernel" <linux-kernel@vger.kernel.org> > > Gesendet: Mittwoch, 29. April 2020 16:56:31 > > Betreff: Re: [PATCH] ubifs: Fix ubifs_tnc_lookup() usage in do_kill_orphans() > > > Hi Richard, > > > > Could you CC this patch to stable? It fixes a serious problem that I am > > seeing on real devices (i.e. Linux not being able to mount its root > > filesystem after a power cut). Thanks. > > Just checked again, better ask stable maintainers. :-) > > Stable maintainers, can you please make sure this patch will make it > into stable? > The upstream commit is: > 4ab25ac8b2b5 ("ubifs: Fix ubifs_tnc_lookup() usage in do_kill_orphans()") > > I always thought havings a Fixes-Tag is enough to make sure it will > get picked up. Isn't this the case? No it is not, please read: https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html for how to do this properly. Our scripts are doing better to dig out stuff where maintainers mess up and forget to put the cc: stable tag, but you can never rely on it. Please stick with the above rules that have been there for 15+ years :) thanks, greg k-h
----- Ursprüngliche Mail ----- >> I always thought havings a Fixes-Tag is enough to make sure it will >> get picked up. Isn't this the case? > > No it is not, please read: > https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html > for how to do this properly. > > Our scripts are doing better to dig out stuff where maintainers mess up > and forget to put the cc: stable tag, but you can never rely on it. > Please stick with the above rules that have been there for 15+ years :) Sir, yes, sir. Thanks, //richard
diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c index 54d6db61106f..2645917360b9 100644 --- a/fs/ubifs/orphan.c +++ b/fs/ubifs/orphan.c @@ -688,14 +688,14 @@ static int do_kill_orphans(struct ubifs_info *c, struct ubifs_scan_leb *sleb, ino_key_init(c, &key1, inum); err = ubifs_tnc_lookup(c, &key1, ino); - if (err) + if (err && err != -ENOENT) goto out_free; /* * Check whether an inode can really get deleted. * linkat() with O_TMPFILE allows rebirth of an inode. */ - if (ino->nlink == 0) { + if (err == 0 && ino->nlink == 0) { dbg_rcvry("deleting orphaned inode %lu", (unsigned long)inum);
Orphans are allowed to point to deleted inodes. So -ENOENT is not a fatal error. Reported-by: Кочетков Максим <fido_max@inbox.ru> Reported-and-tested-by: "Christian Berger" <Christian.Berger@de.bosch.com> Fixes: ee1438ce5dc4 ("ubifs: Check link count of inodes when killing orphans.") Signed-off-by: Richard Weinberger <richard@nod.at> --- fs/ubifs/orphan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)