[ovs-dev] [PATCHv2] dpif-linux: Give each port its own userspace-kernel channel.
Ben Pfaff
blp at nicira.com
Thu Jan 10 19:24:07 UTC 2013
On Thu, Jan 10, 2013 at 09:30:31AM -0800, Justin Pettit wrote:
> - for (ch = dpif->channels; ch < &dpif->channels[dpif->n_channels]; ch++) {
> + for (ch = dpif->channels; ch < &dpif->channels[dpif->uc_array_size]; ch++)
A { got lost here somehow.
Also, I noticed that in the commit message you refer to a commit by
only 6 digits. I'd use at least 8-10, 6 is likely to be ambiguous, if
not now then sometime later.
It looks like the dpif_name() call here is indented 4 spaces too few:
+ if (new_size > 65535) {
+ VLOG_WARN_RL(&error_rl, "%s: datapath port %"PRIu32" too big",
+ dpif_name(&dpif->dpif), port_no);
+ return EFBIG;
+ }
In add_channel(), when we increase the array size, we do not
initialize dpif->channels[port_no].sock or
dpif->channels[port_no].last_poll. Ordinarily it will be set later on
after we add the epoll_fd, but if that fails then I believe it will be
left indeterminate. I think that we could fix that by changing
for (i = dpif->uc_array_size; i < port_no; i++) {
to
for (i = dpif->uc_array_size; i < new_size; i++) {
In dpif_linux_port_add(), if add_channel() fails, do you think we
should try to delete the port?
In dpif_linux_recv_set(), we give up and return an error if setting
the uplink pid for any port fails. I agree that returning an error is
the right thing to do, but I think we should consider still continuing
to add channels for the remaining ports. That way, we will be more
resilient against ports getting deleted while recv_set() runs. (One
way that a port could get deleted is for a VM to terminate and the
netdevs for its VIFs to disappear from the datapath. It is hard to
avoid that race. Another way, of course, is "ovs-dpctl del-port".).
Thanks,
Ben.
More information about the dev
mailing list