lkml.org 
[lkml]   [2007]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: pktcdvd oops
    [Greg cc'd]

    Peter Osterlund wrote:
    > On Mon, 5 Nov 2007, Jens Axboe wrote:
    >
    >> Hi Peter,
    >>
    >> You don't seem to have a bugzilla account, so could not reassign to you.
    >> See http://bugzilla.kernel.org/show_bug.cgi?id=9294
    >
    > Problem is repeatable on my computer. It dies in __module_get() on this
    > line:
    >
    > BUG_ON(module_refcount(module) == 0);
    >
    > I think this is because commit 7b595756ec1f49e0049a9e01a1298d53a7faaa15,
    > which states: "Note that with this change, userland holding a sysfs node
    > does not prevent the backing module from being unloaded."
    >
    > Unfortunately, I don't know how this sysfs stuff is supposed to work,
    > and therefore don't know how to fix the problem.

    Does this fix the problem?

    --
    tejun
    diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
    index a8130a4..a5ee213 100644
    --- a/drivers/block/pktcdvd.c
    +++ b/drivers/block/pktcdvd.c
    @@ -358,10 +358,19 @@ static ssize_t class_pktcdvd_store_add(struct class *c, const char *buf,
    size_t count)
    {
    unsigned int major, minor;
    +
    if (sscanf(buf, "%u:%u", &major, &minor) == 2) {
    + /* pkt_setup_dev() expects caller to hold reference to self */
    + if (!try_module_get(THIS_MODULE))
    + return -ENODEV;
    +
    pkt_setup_dev(MKDEV(major, minor), NULL);
    +
    + module_put(THIS_MODULE);
    +
    return count;
    }
    +
    return -EINVAL;
    }
    \
     
     \ /
      Last update: 2007-11-06 10:09    [W:3.640 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site