All of lore.kernel.org
 help / color / mirror / Atom feed
From: Veaceslav Falico <vfalico@redhat.com>
To: nikolay@redhat.com
Cc: netdev@vger.kernel.org, fubar@us.ibm.com, andy@greyhouse.net,
	davem@davemloft.net
Subject: Re: [-net,v2,1/2] bonding: fix store_arp_validate race with mode change
Date: Tue, 10 Sep 2013 20:15:29 +0200	[thread overview]
Message-ID: <20130910181529.GF8474@redhat.com> (raw)
In-Reply-To: <1378504826-18855-2-git-send-email-nikolay@redhat.com>

On Sat, Sep 07, 2013 at 12:00:25AM +0200, nikolay@redhat.com wrote:
>We need to protect store_arp_validate via rtnl because it can race with
>mode changing and we can end up having arp_validate set in a mode
>different from active-backup.
>
>Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>

Acked-by: Veaceslav Falico <vfalico@redhat.com>

>
>---
>v2: no change
>
> drivers/net/bonding/bond_sysfs.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
>index ce46776..4e38683 100644
>--- a/drivers/net/bonding/bond_sysfs.c
>+++ b/drivers/net/bonding/bond_sysfs.c
>@@ -419,27 +419,33 @@ static ssize_t bonding_store_arp_validate(struct device *d,
> 					  struct device_attribute *attr,
> 					  const char *buf, size_t count)
> {
>-	int new_value;
>+	int new_value, ret = count;
> 	struct bonding *bond = to_bond(d);

p.s. If, by any chance, there'll be another v3 - move that struct before
ints :). But it's ok as is, anyway.

>
>+	if (!rtnl_trylock())
>+		return restart_syscall();
> 	new_value = bond_parse_parm(buf, arp_validate_tbl);
> 	if (new_value < 0) {
> 		pr_err("%s: Ignoring invalid arp_validate value %s\n",
> 		       bond->dev->name, buf);
>-		return -EINVAL;
>+		ret = -EINVAL;
>+		goto out;
> 	}
> 	if (new_value && (bond->params.mode != BOND_MODE_ACTIVEBACKUP)) {
> 		pr_err("%s: arp_validate only supported in active-backup mode.\n",
> 		       bond->dev->name);
>-		return -EINVAL;
>+		ret = -EINVAL;
>+		goto out;
> 	}
> 	pr_info("%s: setting arp_validate to %s (%d).\n",
> 		bond->dev->name, arp_validate_tbl[new_value].modename,
> 		new_value);
>
> 	bond->params.arp_validate = new_value;
>+out:
>+	rtnl_unlock();
>
>-	return count;
>+	return ret;
> }
>
> static DEVICE_ATTR(arp_validate, S_IRUGO | S_IWUSR, bonding_show_arp_validate,

  reply	other threads:[~2013-09-10 18:17 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-06 22:00 [PATCH -net v2 0/2] bonding: fix arp_validate desync state & race Nikolay Aleksandrov
2013-09-06 22:00 ` [PATCH -net v2 1/2] bonding: fix store_arp_validate race with mode change Nikolay Aleksandrov
2013-09-10 18:15   ` Veaceslav Falico [this message]
2013-09-06 22:00 ` [PATCH -net v2 2/2] bonding: fix bond_arp_rcv setting and arp validate desync state Nikolay Aleksandrov
2013-09-10 14:48   ` Marcelo Ricardo Leitner
2013-09-10 18:20   ` [-net, v2, " Veaceslav Falico
2013-09-11 19:55 ` [PATCH -net v2 0/2] bonding: fix arp_validate desync state & race David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130910181529.GF8474@redhat.com \
    --to=vfalico@redhat.com \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=fubar@us.ibm.com \
    --cc=netdev@vger.kernel.org \
    --cc=nikolay@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.