File transfer problem (SOS!!) - Some more info

From: pramodh mallipatna (
Date: Fri May 26 2000 - 07:20:55 EST


I am stuck with this problem from quite a long time. So, any help is
highly appreciated.

I am trying trying to do File transfer over Ethernet using my own protocol
type (non-IP). A small description is provided in the end FYI.

The receiver craps out for large transfers. I just happened to get this
message today, which gave more insight to the problem.

At the receiver, I get the following message
   " kmem_grow: Called nonatomically from int - buffer_head "

This I figured was because, I was writing to the file in Bottom-half
context, which is why kmem_cache_grow() gives the following message.

So, small transfers go through fine, but large transfers have a problem.
I even tried setting the flags to SLAB_ATOMIC if kmem_cache_grow() was
called in interrupt context, but even with this, it fails.

Could anyone suggest how can I overcome this problem.


My Implementation:
Sender : At the sender, I read data using generic_file_read(), packetize,
         frame the Ethernet header (tag it with my own packet type) and
         hand the packet over to ethernet driver through dev_queue_xmit().

Receiver : When the Ethernet driver hands the packet to me through
           net_bh(), I queue the packet and return the control. I have my
           own bottom half which services this queue and writes to the
           file using a routine similar to ext2_file_write().

Since I am writing to the file in the bottom-half context,
kmem_cache_alloc() fails for large data sets.

I have sent two other mails. In case you need to look at it for more
details, here are the URLs from the mailing list archive.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
Please read the FAQ at

This archive was generated by hypermail 2b29 : Wed May 31 2000 - 21:00:15 EST