From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755457AbcEYPvh (ORCPT ); Wed, 25 May 2016 11:51:37 -0400 Received: from zeniv.linux.org.uk ([195.92.253.2]:50942 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752823AbcEYPvf (ORCPT ); Wed, 25 May 2016 11:51:35 -0400 Date: Wed, 25 May 2016 16:51:31 +0100 From: Al Viro To: Jeff Chua Cc: lkml , Linus Torvalds Subject: Re: can't boot with reiserfs on linux-4.6.0+ Message-ID: <20160525155131.GF14480@ZenIV.linux.org.uk> References: <20160524155901.GX14480@ZenIV.linux.org.uk> <20160524183703.GZ14480@ZenIV.linux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.6.0 (2016-04-01) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, May 25, 2016 at 05:30:22PM +0800, Jeff Chua wrote: > On Wed, May 25, 2016 at 2:37 AM, Al Viro wrote: > > On Tue, May 24, 2016 at 04:59:02PM +0100, Al Viro wrote: > > > >> Umm... Any chance of getting the function names to go with the addresses? > >> I'll try to reproduce it here, but the things would be easier with that > >> information... > > > > See if this fixes your reproducer. > > > > diff --git a/fs/xattr.c b/fs/xattr.c > > index b11945e..49b8eab 100644 > > --- a/fs/xattr.c > > +++ b/fs/xattr.c > > @@ -667,6 +667,9 @@ xattr_resolve_name(const struct xattr_handler **handlers, const char **name) > > { > > const struct xattr_handler *handler; > > > > + if (!handlers) > > + return NULL; > > + > > if (!*name) > > return NULL; > > > > Tried, but doesn't work. D'oh... Since "vfs: Distinguish between full xattr names and proper prefixes" we really need to return ERR_PTR() there (and I even have a patch from Andreas fixing that if (!*name) return NULL; in my queue). Combined delta to test (that'll go as two commits, one mine, one his): diff --git a/fs/xattr.c b/fs/xattr.c index b11945e..fc81e77 100644 --- a/fs/xattr.c +++ b/fs/xattr.c @@ -655,6 +655,7 @@ strcmp_prefix(const char *a, const char *a_prefix) * operations to the correct xattr_handler. */ #define for_each_xattr_handler(handlers, handler) \ + if (handlers) \ for ((handler) = *(handlers)++; \ (handler) != NULL; \ (handler) = *(handlers)++) @@ -668,7 +669,7 @@ xattr_resolve_name(const struct xattr_handler **handlers, const char **name) const struct xattr_handler *handler; if (!*name) - return NULL; + return ERR_PTR(-EINVAL); for_each_xattr_handler(handlers, handler) { const char *n;