The patch titled kfifo: make kfifo_in atomic has been added to the -mm tree. Its filename is kfifo-make-kfifo_in-atomic.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://userweb.kernel.org/~akpm/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: kfifo: make kfifo_in atomic From: Andi Kleen <andi@xxxxxxxxxxxxxx> Right now kfifo_in allows copying in less than the input amount. This is unfortunately not a good idea on any record oriented users: if the size of the kfifo is not a multiple of the record (and that can easily happen due to the power-of-two requirement) then when the FIFO fills up partial records could be put in. Such a condition would be fatal for any record consumer who would get permanently desynchronized. In fact I doubt unless the input is a totally boundary less data stream I doubt anything could handle this. Change kfifo_in() to always put in everything or nothing. The return value is now always 0 or the full length. Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx> Cc: Stefani Seibold <stefani@xxxxxxxxxxx> Cc: Roland Dreier <rdreier@xxxxxxxxx> Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> Cc: Andy Walls <awalls@xxxxxxxxx> Cc: Vikram Dhillon <dhillonv10@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- kernel/kfifo.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff -puN kernel/kfifo.c~kfifo-make-kfifo_in-atomic kernel/kfifo.c --- a/kernel/kfifo.c~kfifo-make-kfifo_in-atomic +++ a/kernel/kfifo.c @@ -228,9 +228,8 @@ EXPORT_SYMBOL(__kfifo_in_n); * @from: the data to be added. * @len: the length of the data to be added. * - * This function copies at most @len bytes from the @from buffer into - * the FIFO depending on the free space, and returns the number of - * bytes copied. + * This function copies @len bytes from the @from buffer into + * the FIFO and returns 0 if there is not enough space. * * Note that with only one concurrent reader and one concurrent * writer, you don't need extra locking to use these functions. @@ -238,8 +237,8 @@ EXPORT_SYMBOL(__kfifo_in_n); unsigned int kfifo_in(struct kfifo *fifo, const void *from, unsigned int len) { - len = min(kfifo_avail(fifo), len); - + if (kfifo_avail(fifo) < len) + return 0; __kfifo_in_data(fifo, from, len, 0); __kfifo_add_in(fifo, len); return len; _ Patches currently in -mm which might be from andi@xxxxxxxxxxxxxx are origin.patch kernel-signalc-fix-kernel-information-leak-with-print-fatal-signals=1.patch kfifo-use-void-pointers-for-user-buffers.patch kfifo-make-kfifo_in-atomic.patch kfifo-sanitize-_user-error-handling.patch kfifo-add-kfifo_out_peek.patch kfifo-add-kfifo_initialized.patch kfifo-document-everywhere-that-size-has-to-be-power-of-two.patch hardware-latency-detector-remove-default-m.patch kbuild-move-fno-dwarf2-cfi-asm-to-powerpc-only.patch mm-introduce-dump_page-and-print-symbolic-flag-names.patch tracehooks-kill-some-pt_ptraced-checks.patch tracehooks-check-pt_ptraced-before-reporting-the-single-step.patch ptrace_signal-check-pt_ptraced-before-reporting-a-signal.patch export-__ptrace_detach-and-do_notify_parent_cldstop.patch reorder-the-code-in-kernel-ptracec.patch implement-utrace-ptrace.patch utrace-core.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html