sh: convert /proc/cpu/aligmnent, /proc/cpu/kernel_alignment to seq_file
[safe/jmp/linux-2.6] / net / bridge / br_sysfs_if.c
index 2da2292..820643a 100644 (file)
@@ -29,8 +29,7 @@ struct brport_attribute {
 #define BRPORT_ATTR(_name,_mode,_show,_store)                  \
 struct brport_attribute brport_attr_##_name = {                \
        .attr = {.name = __stringify(_name),                    \
-                .mode = _mode,                                 \
-                .owner = THIS_MODULE, },                       \
+                .mode = _mode },                               \
        .show   = _show,                                        \
        .store  = _store,                                       \
 };
@@ -144,6 +143,22 @@ static ssize_t store_flush(struct net_bridge_port *p, unsigned long v)
 }
 static BRPORT_ATTR(flush, S_IWUSR, NULL, store_flush);
 
+static ssize_t show_hairpin_mode(struct net_bridge_port *p, char *buf)
+{
+       int hairpin_mode = (p->flags & BR_HAIRPIN_MODE) ? 1 : 0;
+       return sprintf(buf, "%d\n", hairpin_mode);
+}
+static ssize_t store_hairpin_mode(struct net_bridge_port *p, unsigned long v)
+{
+       if (v)
+               p->flags |= BR_HAIRPIN_MODE;
+       else
+               p->flags &= ~BR_HAIRPIN_MODE;
+       return 0;
+}
+static BRPORT_ATTR(hairpin_mode, S_IRUGO | S_IWUSR,
+                  show_hairpin_mode, store_hairpin_mode);
+
 static struct brport_attribute *brport_attrs[] = {
        &brport_attr_path_cost,
        &brport_attr_priority,
@@ -160,6 +175,7 @@ static struct brport_attribute *brport_attrs[] = {
        &brport_attr_forward_delay_timer,
        &brport_attr_hold_timer,
        &brport_attr_flush,
+       &brport_attr_hairpin_mode,
        NULL
 };
 
@@ -190,7 +206,8 @@ static ssize_t brport_store(struct kobject * kobj,
 
        val = simple_strtoul(buf, &endp, 0);
        if (endp != buf) {
-               rtnl_lock();
+               if (!rtnl_trylock())
+                       return restart_syscall();
                if (p->dev && p->br && brport_attr->store) {
                        spin_lock_bh(&p->br->lock);
                        ret = brport_attr->store(p, val);
@@ -230,7 +247,7 @@ int br_sysfs_addif(struct net_bridge_port *p)
                        goto out2;
        }
 
-       err= sysfs_create_link(&br->ifobj, &p->kobj, p->dev->name);
+       err = sysfs_create_link(br->ifobj, &p->kobj, p->dev->name);
 out2:
        return err;
 }