drivers/net: check process type in close operation
[dpdk.git] / drivers / net / virtio / virtio_user / vhost_kernel_tap.c
index 2fbfecb..acddefa 100644 (file)
@@ -74,6 +74,7 @@ vhost_kernel_open_tap(char **p_ifname, int hdr_size, int req_mq,
        int sndbuf = INT_MAX;
        struct ifreq ifr;
        int tapfd;
+       int ret;
 
        /* TODO:
         * 1. verify we can get/set vnet_hdr_len, tap_probe_vnet_hdr_len
@@ -127,7 +128,10 @@ vhost_kernel_open_tap(char **p_ifname, int hdr_size, int req_mq,
                goto error;
        }
 
-       fcntl(tapfd, F_SETFL, O_NONBLOCK);
+       if (fcntl(tapfd, F_SETFL, O_NONBLOCK) < 0) {
+               PMD_DRV_LOG(ERR, "fcntl tapfd failed: %s", strerror(errno));
+               goto error;
+       }
 
        if (ioctl(tapfd, TUNSETVNETHDRSZ, &hdr_size) < 0) {
                PMD_DRV_LOG(ERR, "TUNSETVNETHDRSZ failed: %s", strerror(errno));
@@ -139,7 +143,9 @@ vhost_kernel_open_tap(char **p_ifname, int hdr_size, int req_mq,
                goto error;
        }
 
-       vhost_kernel_tap_set_offload(tapfd, features);
+       ret = vhost_kernel_tap_set_offload(tapfd, features);
+       if (ret < 0 && ret != -ENOTSUP)
+               goto error;
 
        memset(&ifr, 0, sizeof(ifr));
        ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER;