0

我正在寻找__sock_create()代码以更好地了解内核的内部机制,并发现内核调用try_module_get()了两次;这是一个片段:

static int __sock_create(struct net *net, int family, int type, int protocol, struct socket **res, int kern)
{
   sock = sock_alloc();
   ...
   if (!try_module_get(pf->owner))
      goto out_release;

   err = pf->create(net, sock, protocol);
   ...

   if (!try_module_get(sock->ops->owner))
      goto out_module_busy

   ...
}

本质上,如果与套接字相关的回调在模块中,那么每当socket()来自用户空间的每个回调都会增加模块的引用计数两次。这种行为的理由是什么?

4

1 回答 1

1

您有两个模块,因此有两个引用计数增量。一是Packet族模块,二是socket型模块。

结帐http://www.haifux.org/lectures/217/netLec5.pdf以供参考。

于 2012-12-19T16:15:24.867 回答