Hi guys, For my case, I looked at /proc/net/netlink and noticed that sk_rmem_alloc keep on increasing until it exceeded the size of my sk_rcvbuf. This causes the packet to be dropped. Please correct me if I am wrong, I have the impression that recvmsg in the userspace would lead to kfree_skb, which will cause sk_rmem_alloc to be decremented. Am I missing something here? Many thanks for any advices! On 7/20/05, MHD.Tayseer <gilmour@xxxxxxxxxxx> wrote: > Jonathan Khoo wrote: > > >Hi guys, > > > >I am working on a kernel module which needs to transfer information > >between user space and the kernel. I was referring to a linux journal > >article (http://www.linuxjournal.com/article/7356). > > > >I am using netlink_unicast to copy a series of strings (<=80bytes) to > >user space. I am stuck after a few calls. The code I used is almost > >similar to that in the linux journal article. The user space program > >will wait at recvmsg for the message. > > > >Is there anything that I am suppose to do but it was not mentioned in > >the article? > > > >Many thanks for any advices! > > > > > I've faced the same problem my self > The artivle in the Linux journal states that calling > "wake_up_interruptible" from the callback function is enough to wake up > the blocking receive process but testing it out didn't worked > I've read the code of "skb_recv_datagram" and the code of > "wake_up_interruptible" and everything seemed to be logical .. if anyone > could read them out and find out why it's not working it will be more > logical > The solution I've used my self is a little tricky .. whenever any peace > of code in my kernel module wants to send a request to user space it > puts a unique sequence number in the nlmsghdr->nlmgs_seq and states a > buffer to receive the reply in and put it self on a waiting list then > it sends the request and do "down_interruptible" on a semaphore .. > whenever data arrive to kernel "whenever the callback function is > called" it looks for a request in the waiting_list with a sequence > number as the reply has> once such a request is found the message is > copied to the buffer stated by the sender and "up" is called on the > semaphore that the sending is waiting on > it's a little bit complicated but it's working ... anyone has better > solutions ?? > MHD > > -- cheers, jonathan khoo -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/