On Mon, 15 Mar 2010, Daniel Baluta wrote: > Hi Robert, > > On Mon, Mar 15, 2010 at 4:58 PM, Robert P. J. Day wrote: > > > >  (i am not trying to be annoyingly obsessive about the kernel kfifo, > > i am merely succeeding.) > :P > >  what appears to be a bit of an oddity WRT kfifo:  since a kfifo is > > defined with a fixed buffer size, it obviously enqueues and dequeues > > in a circular fashion.  so, the code to add some data to a kfifo (from > > kernel/kfifo.c): > > > > ===== > > unsigned int kfifo_in(struct kfifo *fifo, const void *from, > >                                unsigned int len) > > { > >        len = min(kfifo_avail(fifo), len); > > > >        __kfifo_in_data(fifo, from, len, 0); > >        __kfifo_add_in(fifo, len); > >        return len; > > } > > ===== > > > >  fair enough -- that first routine adds the data itself, while the > > second one correspondingly bumps up the pointer, which could > > conceivably wrap around to follow the data, correct?  but from > > include/linux.kfifo.h:len = min(kfifo_avail(fifo), len); > > Wrong :). If you notice len is truncated using: > len = min(kfifo_avail(fifo), len); kfifo_avail() is defined as returning the number of available bytes left in the buffer ready to accept incoming data, even if that incorporates wraparound. that is not relevant to the point i was making. rday -- ======================================================================== Robert P. J. Day Waterloo, Ontario, CANADA Linux Consulting, Training and Kernel Pedantry. Web page: http://crashcourse.ca Twitter: http://twitter.com/rpjday ========================================================================