From: Jakub Kicinski <kuba@kernel.org>
To: David Wei <dw@davidwei.uk>
Cc: Jiri Pirko <jiri@resnulli.us>,
Sabrina Dubroca <sd@queasysnail.net>,
netdev@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>
Subject: Re: [PATCH net-next v5 2/5] netdevsim: allow two netdevsim ports to be connected
Date: Wed, 3 Jan 2024 17:39:28 -0800 [thread overview]
Message-ID: <20240103173928.76264ebe@kernel.org> (raw)
In-Reply-To: <20231228014633.3256862-3-dw@davidwei.uk>
On Wed, 27 Dec 2023 17:46:30 -0800 David Wei wrote:
> +static ssize_t nsim_dev_peer_write(struct file *file,
> + const char __user *data,
> + size_t count, loff_t *ppos)
> +{
> + struct nsim_dev_port *nsim_dev_port, *peer_dev_port;
> + struct nsim_dev *peer_dev;
> + unsigned int id, port;
> + char buf[22];
> + ssize_t ret;
> +
> + if (count >= sizeof(buf))
> + return -ENOSPC;
> +
> + ret = copy_from_user(buf, data, count);
> + if (ret)
> + return -EFAULT;
> + buf[count] = '\0';
> +
> + ret = sscanf(buf, "%u %u", &id, &port);
> + if (ret != 2) {
> + pr_err("Format is peer netdevsim \"id port\" (uint uint)\n");
netif_err() or dev_err() ? Granted the rest of the file seems to use
pr_err(), but I'm not sure why...
> + return -EINVAL;
> + }
Could you put a sleep() here and test removing the device while some
thread is stuck here? I don't recall exactly but I thought debugfs
remove waits for concurrent reads and writes which could be problematic
given we take all the locks under the sun here..
> + ret = -EINVAL;
> + mutex_lock(&nsim_dev_list_lock);
> + peer_dev = nsim_dev_find_by_id(id);
> + if (!peer_dev) {
> + pr_err("Peer netdevsim %u does not exist\n", id);
> + goto out_mutex;
> + }
> +
> + devl_lock(priv_to_devlink(peer_dev));
> + rtnl_lock();
> + nsim_dev_port = file->private_data;
> + peer_dev_port = __nsim_dev_port_lookup(peer_dev, NSIM_DEV_PORT_TYPE_PF,
> + port);
> + if (!peer_dev_port) {
> + pr_err("Peer netdevsim %u port %u does not exist\n", id, port);
> + goto out_devl;
> + }
> +
> + if (nsim_dev_port == peer_dev_port) {
> + pr_err("Cannot link netdevsim to itself\n");
> + goto out_devl;
> + }
> +
> + rcu_assign_pointer(nsim_dev_port->ns->peer, peer_dev_port->ns);
> + rcu_assign_pointer(peer_dev_port->ns->peer, nsim_dev_port->ns);
> + ret = count;
> +
> +out_devl:
out_unlock_rtnl
> + rtnl_unlock();
> + devl_unlock(priv_to_devlink(peer_dev));
> +out_mutex:
out_unlock_dev_list
> + mutex_unlock(&nsim_dev_list_lock);
> +
> + return ret;
> +}
> +
> +static const struct file_operations nsim_dev_peer_fops = {
> + .open = simple_open,
> + .read = nsim_dev_peer_read,
> + .write = nsim_dev_peer_write,
> + .llseek = generic_file_llseek,
You don't support seek, you want some form of no_seek here.
> + .owner = THIS_MODULE,
> +};
next prev parent reply other threads:[~2024-01-04 1:39 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-28 1:46 [PATCH net-next v5 0/5] netdevsim: link and forward skbs between ports David Wei
2023-12-28 1:46 ` [PATCH net-next v5 1/5] netdevsim: maintain a list of probed netdevsims David Wei
2024-01-02 11:04 ` Jiri Pirko
2024-01-03 21:48 ` David Wei
2023-12-28 1:46 ` [PATCH net-next v5 2/5] netdevsim: allow two netdevsim ports to be connected David Wei
2024-01-02 11:11 ` Jiri Pirko
2024-01-03 21:56 ` David Wei
2024-01-04 9:30 ` Jiri Pirko
2024-01-04 1:39 ` Jakub Kicinski [this message]
2024-01-09 16:57 ` David Wei
2024-01-10 1:53 ` Jakub Kicinski
2023-12-28 1:46 ` [PATCH net-next v5 3/5] netdevsim: forward skbs from one connected port to another David Wei
2024-01-02 11:13 ` Jiri Pirko
2024-01-03 22:36 ` David Wei
2024-01-04 9:31 ` Jiri Pirko
2024-01-09 16:58 ` David Wei
2024-01-02 11:20 ` Eric Dumazet
2024-01-03 21:57 ` David Wei
2023-12-28 1:46 ` [PATCH net-next v5 4/5] netdevsim: add selftest for forwarding skb between connected ports David Wei
2023-12-28 1:46 ` [PATCH net-next v5 5/5] netdevsim: add Makefile for selftests David Wei
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=20240103173928.76264ebe@kernel.org \
--to=kuba@kernel.org \
--cc=davem@davemloft.net \
--cc=dw@davidwei.uk \
--cc=edumazet@google.com \
--cc=jiri@resnulli.us \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sd@queasysnail.net \
/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.