lkml.org 
[lkml]   [2009]   [Jan]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] driver core: Convert '/' to '!' in dev_set_name()
    Date
    Commit 3ada8b7e ("block: struct device - replace bus_id with dev_name(),
    dev_set_name()") deleted the code in register_disk() that changed a '/'
    to a '!' in the device name when registering a disk, but dev_set_name()
    does not perform this conversion.

    This leads to amusing problems with disks that have '/' in their names:
    for example a failure to boot with the root partition on a cciss device,
    even though the kernel says it knows about the root device:

    VFS: Cannot open root device "cciss/c0d0p6" or unknown-block(0,0)
    Please append a correct "root=" boot option; here are the available partitions:
    6800 71652960 cciss/c0d0 driver: cciss
    6802 1 cciss/c0d0p2
    6805 2931831 cciss/c0d0p5
    6806 34354908 cciss/c0d0p6
    6810 71652960 cciss/c0d1 driver: cciss

    Fix this by adding code to change '/' to '!' in dev_set_name() to handle
    this until dev_set_name() is converted to use kobject_set_name().

    Signed-off-by: Roland Dreier <rolandd@cisco.com>
    ---
    OK, this is tested to work on my system as well.

    drivers/base/core.c | 6 ++++++
    1 files changed, 6 insertions(+), 0 deletions(-)

    diff --git a/drivers/base/core.c b/drivers/base/core.c
    index 8079afc..55e5309 100644
    --- a/drivers/base/core.c
    +++ b/drivers/base/core.c
    @@ -777,10 +777,16 @@ static void device_remove_class_symlinks(struct device *dev)
    int dev_set_name(struct device *dev, const char *fmt, ...)
    {
    va_list vargs;
    + char *s;

    va_start(vargs, fmt);
    vsnprintf(dev->bus_id, sizeof(dev->bus_id), fmt, vargs);
    va_end(vargs);
    +
    + /* ewww... some of these buggers have / in the name... */
    + while ((s = strchr(dev->bus_id, '/')))
    + *s = '!';
    +
    return 0;
    }
    EXPORT_SYMBOL_GPL(dev_set_name);

    \
     
     \ /
      Last update: 2009-01-10 07:31    [W:0.022 / U:1.144 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site