Skip to content

Commit

Permalink
Merge of rsync://rsync.kernel.org/pub/scm/linux/kernel/git/gregkh/aoe…
Browse files Browse the repository at this point in the history
…-2.6.git/
  • Loading branch information
Linus Torvalds committed May 4, 2005
2 parents 742b0c9 + 0e57c71 commit a1d4ebd
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 17 deletions.
40 changes: 36 additions & 4 deletions Documentation/aoe/aoe.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@ The EtherDrive (R) HOWTO for users of 2.6 kernels is found at ...

It has many tips and hints!

The aoetools are userland programs that are designed to work with this
driver. The aoetools are on sourceforge.

http://aoetools.sourceforge.net/

The scripts in this Documentation/aoe directory are intended to
document the use of the driver and are not necessary if you install
the aoetools.


CREATING DEVICE NODES

Users of udev should find the block device nodes created
Expand Down Expand Up @@ -35,14 +45,15 @@ USING DEVICE NODES

"echo eth2 eth4 > /dev/etherd/interfaces" tells the aoe driver to
limit ATA over Ethernet traffic to eth2 and eth4. AoE traffic from
untrusted networks should be ignored as a matter of security.
untrusted networks should be ignored as a matter of security. See
also the aoe_iflist driver option described below.

"echo > /dev/etherd/discover" tells the driver to find out what AoE
devices are available.

These character devices may disappear and be replaced by sysfs
counterparts, so distribution maintainers are encouraged to create
scripts that use these devices.
counterparts. Using the commands in aoetools insulates users from
these implementation details.

The block devices are named like this:

Expand All @@ -66,7 +77,8 @@ USING SYSFS
through which we are communicating with the remote AoE device.

There is a script in this directory that formats this information
in a convenient way.
in a convenient way. Users with aoetools can use the aoe-stat
command.

root@makki root# sh Documentation/aoe/status.sh
e10.0 eth3 up
Expand All @@ -89,3 +101,23 @@ USING SYSFS
e4.7 eth1 up
e4.8 eth1 up
e4.9 eth1 up

Use /sys/module/aoe/parameters/aoe_iflist (or better, the driver
option discussed below) instead of /dev/etherd/interfaces to limit
AoE traffic to the network interfaces in the given
whitespace-separated list. Unlike the old character device, the
sysfs entry can be read from as well as written to.

It's helpful to trigger discovery after setting the list of allowed
interfaces. The aoetools package provides an aoe-discover script
for this purpose. You can also directly use the
/dev/etherd/discover special file described above.

DRIVER OPTIONS

There is a boot option for the built-in aoe driver and a
corresponding module parameter, aoe_iflist. Without this option,
all network interfaces may be used for ATA over Ethernet. Here is a
usage example for the module parameter.

modprobe aoe_iflist="eth1 eth3"
4 changes: 0 additions & 4 deletions Documentation/aoe/status.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ test ! -d "$sysd/block" && {
echo "$me Error: sysfs is not mounted" 1>&2
exit 1
}
test -z "`lsmod | grep '^aoe'`" && {
echo "$me Error: aoe module is not loaded" 1>&2
exit 1
}

for d in `ls -d $sysd/block/etherd* 2>/dev/null | grep -v p` end; do
# maybe ls comes up empty, so we use "end"
Expand Down
2 changes: 1 addition & 1 deletion drivers/block/aoe/aoe.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Copyright (c) 2004 Coraid, Inc. See COPYING for GPL terms. */
#define VERSION "6"
#define VERSION "10"
#define AOE_MAJOR 152
#define DEVICE_NAME "aoe"

Expand Down
13 changes: 13 additions & 0 deletions drivers/block/aoe/aoeblk.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ static ssize_t aoedisk_show_netif(struct gendisk * disk, char *page)

return snprintf(page, PAGE_SIZE, "%s\n", d->ifp->name);
}
/* firmware version */
static ssize_t aoedisk_show_fwver(struct gendisk * disk, char *page)
{
struct aoedev *d = disk->private_data;

return snprintf(page, PAGE_SIZE, "0x%04x\n", (unsigned int) d->fw_ver);
}

static struct disk_attribute disk_attr_state = {
.attr = {.name = "state", .mode = S_IRUGO },
Expand All @@ -50,20 +57,26 @@ static struct disk_attribute disk_attr_netif = {
.attr = {.name = "netif", .mode = S_IRUGO },
.show = aoedisk_show_netif
};
static struct disk_attribute disk_attr_fwver = {
.attr = {.name = "firmware-version", .mode = S_IRUGO },
.show = aoedisk_show_fwver
};

static void
aoedisk_add_sysfs(struct aoedev *d)
{
sysfs_create_file(&d->gd->kobj, &disk_attr_state.attr);
sysfs_create_file(&d->gd->kobj, &disk_attr_mac.attr);
sysfs_create_file(&d->gd->kobj, &disk_attr_netif.attr);
sysfs_create_file(&d->gd->kobj, &disk_attr_fwver.attr);
}
void
aoedisk_rm_sysfs(struct aoedev *d)
{
sysfs_remove_link(&d->gd->kobj, "state");
sysfs_remove_link(&d->gd->kobj, "mac");
sysfs_remove_link(&d->gd->kobj, "netif");
sysfs_remove_link(&d->gd->kobj, "firmware-version");
}

static int
Expand Down
11 changes: 4 additions & 7 deletions drivers/block/aoe/aoedev.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,25 +109,22 @@ aoedev_set(ulong sysminor, unsigned char *addr, struct net_device *ifp, ulong bu
spin_lock_irqsave(&devlist_lock, flags);

for (d=devlist; d; d=d->next)
if (d->sysminor == sysminor
|| memcmp(d->addr, addr, sizeof d->addr) == 0)
if (d->sysminor == sysminor)
break;

if (d == NULL && (d = aoedev_newdev(bufcnt)) == NULL) {
spin_unlock_irqrestore(&devlist_lock, flags);
printk(KERN_INFO "aoe: aoedev_set: aoedev_newdev failure.\n");
return NULL;
}
} /* if newdev, (d->flags & DEVFL_UP) == 0 for below */

spin_unlock_irqrestore(&devlist_lock, flags);
spin_lock_irqsave(&d->lock, flags);

d->ifp = ifp;

if (d->sysminor != sysminor
|| (d->flags & DEVFL_UP) == 0) {
memcpy(d->addr, addr, sizeof d->addr);
if ((d->flags & DEVFL_UP) == 0) {
aoedev_downdev(d); /* flushes outstanding frames */
memcpy(d->addr, addr, sizeof d->addr);
d->sysminor = sysminor;
d->aoemajor = AOEMAJOR(sysminor);
d->aoeminor = AOEMINOR(sysminor);
Expand Down
17 changes: 16 additions & 1 deletion drivers/block/aoe/aoenet.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <linux/hdreg.h>
#include <linux/blkdev.h>
#include <linux/netdevice.h>
#include <linux/moduleparam.h>
#include "aoe.h"

#define NECODES 5
Expand All @@ -26,6 +27,19 @@ enum {
};

static char aoe_iflist[IFLISTSZ];
module_param_string(aoe_iflist, aoe_iflist, IFLISTSZ, 0600);
MODULE_PARM_DESC(aoe_iflist, "aoe_iflist=\"dev1 [dev2 ...]\"\n");

#ifndef MODULE
static int __init aoe_iflist_setup(char *str)
{
strncpy(aoe_iflist, str, IFLISTSZ);
aoe_iflist[IFLISTSZ - 1] = '\0';
return 1;
}

__setup("aoe_iflist=", aoe_iflist_setup);
#endif

int
is_aoe_netif(struct net_device *ifp)
Expand All @@ -36,7 +50,8 @@ is_aoe_netif(struct net_device *ifp)
if (aoe_iflist[0] == '\0')
return 1;

for (p = aoe_iflist; *p; p = q + strspn(q, WHITESPACE)) {
p = aoe_iflist + strspn(aoe_iflist, WHITESPACE);
for (; *p; p = q + strspn(q, WHITESPACE)) {
q = p + strcspn(p, WHITESPACE);
if (q != p)
len = q - p;
Expand Down

0 comments on commit a1d4ebd

Please sign in to comment.