lkml.org 
[lkml]   [2007]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 2.6.21-rc7-mm2 crash: Eeek! page_mapcount(page) went negative! (-1)
    On Wed, May 02, 2007 at 12:10:00AM -0700, Andrew Morton wrote:
    > On Wed, 02 May 2007 09:01:22 +0200 Tilman Schmidt <tilman@imap.cc> wrote:
    >
    > > Am 30.04.2007 21:46 schrieb Andrew Morton:
    > > > Not really - everything's tangled up. A bisection search on the
    > > > 2.6.21-rc7-mm2 driver tree would be the best bet.
    > >
    > > And the winner is:
    > >
    > > gregkh-driver-driver-core-make-uevent-environment-available-in-uevent-file.patch
    > >
    > > Reverting only that from 2.6.21-rc7-mm2 gives me a working kernel
    > > again.
    >
    > cripes.
    >
    > +static ssize_t show_uevent(struct device *dev, struct device_attribute *attr,
    > + char *buf)
    > +{
    > + struct kobject *top_kobj;
    > + struct kset *kset;
    > + char *envp[32];
    > + char data[PAGE_SIZE];
    >
    > That won't work too well with 4k stacks.

    Tilman, here's a patch, can you try this on top of your tree that dies?

    thanks,

    greg k-h

    ---
    drivers/base/core.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    --- a/drivers/base/core.c
    +++ b/drivers/base/core.c
    @@ -252,7 +252,7 @@ static ssize_t show_uevent(struct device
    struct kobject *top_kobj;
    struct kset *kset;
    char *envp[32];
    - char data[PAGE_SIZE];
    + char *data = NULL;
    char *pos;
    int i;
    size_t count = 0;
    @@ -276,6 +276,10 @@ static ssize_t show_uevent(struct device
    if (!kset->uevent_ops->filter(kset, &dev->kobj))
    goto out;

    + data = (char *)get_zeroed_page(GFP_KERNEL);
    + if (!data)
    + return -ENOMEM;
    +
    /* let the kset specific function add its keys */
    pos = data;
    retval = kset->uevent_ops->uevent(kset, &dev->kobj,
    @@ -290,6 +294,7 @@ static ssize_t show_uevent(struct device
    count += sprintf(pos, "%s\n", envp[i]);
    }
    out:
    + free_page((unsigned long)data);
    return count;
    }

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-05-02 09:57    [W:5.059 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site