lkml.org 
[lkml]   [2005]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH 2.6.11.7] ATA Over Ethernet Root, Mark 2
    Date
    From
    Second revision of my ATA Over Ethernet root device patch, now with
    white space correction and removed debugging crud.

    Any more comment, suggestions?

    --
    Jason McMullan <jason.mcmullan@timesys.com>
    TimeSys Corporation

    #### Auto-generated patch ####
    Date: Fri, 13 May 2005 15:15:04 -0400
    Signed-Off-By: Jason McMullan <jason.mcmullan@timesys.com>
    Description: ATA Over Ethernet root device
    ie 'root=/dev/etherd/e0.0/disc' on the kernel command line
    Depends:
    linux-2.6.11.7

    ###############################

    Index of changes:

    Kconfig | 15 +++++++++++++++
    aoe/aoe.h | 1 +
    aoe/aoeblk.c | 1 +
    aoe/aoedev.c | 16 ++++++++++++++++
    aoe/aoemain.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
    5 files changed, 83 insertions(+)


    --- linux-orig/drivers/block/Kconfig
    +++ linux/drivers/block/Kconfig
    @@ -506,4 +506,19 @@
    This driver provides Support for ATA over Ethernet block
    devices like the Coraid EtherDrive (R) Storage Blade.

    +config ATA_OVER_ETH_ROOT
    + bool "ATA over Ethernet root device"
    + depends on ATA_OVER_ETH=y
    + help
    + If you want to use ATA Over Ethernet as the root device,
    + set this to 'y'
    +
    +config ATA_OVER_ETH_ROOT_SHELF
    + int "Shelf ID"
    + depends on ATA_OVER_ETH_ROOT
    +
    +config ATA_OVER_ETH_ROOT_SLOT
    + int "Slot ID"
    + depends on ATA_OVER_ETH_ROOT
    +
    endmenu
    --- linux-orig/drivers/block/aoe/aoe.h
    +++ linux/drivers/block/aoe/aoe.h
    @@ -153,6 +153,7 @@
    int aoedev_init(void);
    void aoedev_exit(void);
    struct aoedev *aoedev_bymac(unsigned char *);
    +struct aoedev *aoedev_bymajor_minor(ulong major, ulong minor);
    void aoedev_downdev(struct aoedev *d);
    struct aoedev *aoedev_set(ulong, unsigned char *, struct net_device *, ulong);
    int aoedev_busy(void);
    --- linux-orig/drivers/block/aoe/aoeblk.c
    +++ linux/drivers/block/aoe/aoeblk.c
    @@ -229,6 +229,7 @@
    gd->capacity = d->ssize;
    snprintf(gd->disk_name, sizeof gd->disk_name, "etherd/e%ld.%ld",
    d->aoemajor, d->aoeminor);
    + strncpy(gd->devfs_name, gd->disk_name, sizeof gd->devfs_name);

    gd->queue = &d->blkq;
    d->gd = gd;
    --- linux-orig/drivers/block/aoe/aoedev.c
    +++ linux/drivers/block/aoe/aoedev.c
    @@ -28,6 +28,22 @@
    return d;
    }

    +struct aoedev *aoedev_bymajor_minor(ulong major, ulong minor)
    +{
    + struct aoedev *d;
    + ulong flags;
    +
    + spin_lock_irqsave(&devlist_lock, flags);
    +
    + for (d = devlist; d; d = d->next)
    + if (d->aoemajor == major && d->aoeminor == minor)
    + break;
    +
    + spin_unlock_irqrestore(&devlist_lock, flags);
    + return d;
    +}
    +
    +
    /* called with devlist lock held */
    static struct aoedev *
    aoedev_newdev(ulong nframes)
    --- linux-orig/drivers/block/aoe/aoemain.c
    +++ linux/drivers/block/aoe/aoemain.c
    @@ -7,6 +7,14 @@
    #include <linux/hdreg.h>
    #include <linux/blkdev.h>
    #include <linux/module.h>
    +#include <linux/devfs_fs_kernel.h>
    +
    +/* AOE Root device includes */
    +#include <linux/delay.h>
    +#include <linux/rtnetlink.h>
    +#include <linux/netdevice.h>
    +#include <net/sock.h>
    +
    #include "aoe.h"

    MODULE_LICENSE("GPL");
    @@ -53,6 +61,41 @@
    }
    }

    +#ifdef CONFIG_ATA_OVER_ETH_ROOT
    +void aoe_root(unsigned long major, unsigned long minor)
    +{
    + struct net_device *dev;
    +
    + printk(KERN_INFO
    + "aoe: Waiting for root AOE device e%ld.%ld\n", major, minor);
    +
    + /* Give hardware a chance to settle */
    + msleep(500);
    +
    + rtnl_shlock();
    + /* bring loopback device up first */
    + if (dev_change_flags(&loopback_dev, loopback_dev.flags | IFF_UP) < 0)
    + printk(KERN_ERR "AOE Root: Failed to open %s\n", loopback_dev.name);
    +
    + /* Setup all network devices */
    + for (dev = dev_base; dev ; dev = dev->next) {
    + if (dev == &loopback_dev)
    + continue;
    + dev_change_flags(dev, dev->flags | IFF_UP);
    + }
    + rtnl_shunlock();
    +
    + /* Give drivers a chance to settle */
    + ssleep(1);
    +
    + do {
    + aoecmd_cfg(major, minor);
    + msleep(1);
    + } while (!aoedev_bymajor_minor(CONFIG_ATA_OVER_ETH_ROOT_SHELF,CONFIG_ATA_OVER_ETH_ROOT_SLOT));
    +
    +}
    +#endif
    +
    static void
    aoe_exit(void)
    {
    @@ -63,6 +106,7 @@
    aoechr_exit();
    aoedev_exit();
    aoeblk_exit(); /* free cache after de-allocating bufs */
    + devfs_remove("etherd");
    }

    static int __init
    @@ -70,6 +114,8 @@
    {
    int ret;

    + devfs_mk_dir("etherd");
    +
    ret = aoedev_init();
    if (ret)
    return ret;
    @@ -91,6 +137,9 @@
    printk(KERN_INFO
    "aoe: aoe_init: AoE v2.6-%s initialised.\n",
    VERSION);
    +#ifdef CONFIG_ATA_OVER_ETH_ROOT
    + aoe_root(CONFIG_ATA_OVER_ETH_ROOT_SHELF,CONFIG_ATA_OVER_ETH_ROOT_SLOT);
    +#endif
    discover_timer(TINIT);
    return 0;

    @@ -102,6 +151,7 @@
    aoechr_exit();
    chr_fail:
    aoedev_exit();
    + devfs_remove("etherd");

    printk(KERN_INFO "aoe: aoe_init: initialisation failure.\n");
    return ret;[unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2005-05-13 21:42    [W:3.103 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site