tap: Remove unnecessary global tun_ns_fd

tap_ns_tun(), which runs in an ephemeral thread puts the fd it opens into
the global variable tun_ns_fd to communicate it back to the main thread
in tap_sock_tun_init().

However, the only thing tap_sock_tun_init() does with it is copies it to
c->fd_tap and everything else uses it from there.  tap_ns_tun() already
has access to the context structure, so we might as well store the value
directly in there rather than having a global as an intermediate.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
David Gibson 2023-08-02 13:15:42 +10:00 committed by Stefano Brivio
parent 7bc9b66fc2
commit 0cf7bf31f6

10
tap.c
View file

@ -1165,8 +1165,6 @@ static void tap_sock_unix_new(struct ctx *c)
epoll_ctl(c->epollfd, EPOLL_CTL_ADD, c->fd_tap, &ev); epoll_ctl(c->epollfd, EPOLL_CTL_ADD, c->fd_tap, &ev);
} }
static int tun_ns_fd = -1;
/** /**
* tap_ns_tun() - Get tuntap fd in namespace * tap_ns_tun() - Get tuntap fd in namespace
* @c: Execution context * @c: Execution context
@ -1182,7 +1180,7 @@ static int tap_ns_tun(void *arg)
struct ctx *c = (struct ctx *)arg; struct ctx *c = (struct ctx *)arg;
int fd, rc; int fd, rc;
tun_ns_fd = -1; c->fd_tap = -1;
memcpy(ifr.ifr_name, c->pasta_ifn, IFNAMSIZ); memcpy(ifr.ifr_name, c->pasta_ifn, IFNAMSIZ);
ns_enter(c); ns_enter(c);
@ -1197,7 +1195,7 @@ static int tap_ns_tun(void *arg)
if (!(c->pasta_ifi = if_nametoindex(c->pasta_ifn))) if (!(c->pasta_ifi = if_nametoindex(c->pasta_ifn)))
die("Tap device opened but no network interface found"); die("Tap device opened but no network interface found");
tun_ns_fd = fd; c->fd_tap = fd;
return 0; return 0;
} }
@ -1211,13 +1209,11 @@ static void tap_sock_tun_init(struct ctx *c)
struct epoll_event ev = { 0 }; struct epoll_event ev = { 0 };
NS_CALL(tap_ns_tun, c); NS_CALL(tap_ns_tun, c);
if (tun_ns_fd == -1) if (c->fd_tap == -1)
die("Failed to set up tap device in namespace"); die("Failed to set up tap device in namespace");
pasta_ns_conf(c); pasta_ns_conf(c);
c->fd_tap = tun_ns_fd;
ev.data.fd = c->fd_tap; ev.data.fd = c->fd_tap;
ev.events = EPOLLIN | EPOLLRDHUP; ev.events = EPOLLIN | EPOLLRDHUP;
epoll_ctl(c->epollfd, EPOLL_CTL_ADD, c->fd_tap, &ev); epoll_ctl(c->epollfd, EPOLL_CTL_ADD, c->fd_tap, &ev);