goto err_sock;
        }
 
+       /* Set socket type of service */
+       if (nctrl->opts->tos >= 0) {
+               opt = nctrl->opts->tos;
+               ret = kernel_setsockopt(queue->sock, SOL_IP, IP_TOS,
+                               (char *)&opt, sizeof(opt));
+               if (ret) {
+                       dev_err(nctrl->device,
+                               "failed to set IP_TOS sock opt %d\n", ret);
+                       goto err_sock;
+               }
+       }
+
        queue->sock->sk->sk_allocation = GFP_ATOMIC;
        if (!qid)
                n = 0;
        .allowed_opts   = NVMF_OPT_TRSVCID | NVMF_OPT_RECONNECT_DELAY |
                          NVMF_OPT_HOST_TRADDR | NVMF_OPT_CTRL_LOSS_TMO |
                          NVMF_OPT_HDR_DIGEST | NVMF_OPT_DATA_DIGEST |
-                         NVMF_OPT_NR_WRITE_QUEUES | NVMF_OPT_NR_POLL_QUEUES,
+                         NVMF_OPT_NR_WRITE_QUEUES | NVMF_OPT_NR_POLL_QUEUES |
+                         NVMF_OPT_TOS,
        .create_ctrl    = nvme_tcp_create_ctrl,
 };