lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Sat, 9 Feb 2008 13:57:08 +0100
From:	Simon Richter <Simon.Richter@...yros.de>
To:	linux-kernel@...r.kernel.org
Subject: non-blocking behaviour with multiple readers

Hi,

[please CC me, I'm not subscribed to the list]

I'm writing a driver for a pretty simple USB device, and most of what I
need I can see in similar drivers; right now I'm lifting a lot of code
from drivers/usb/class/usblp.c.

In the read routine, this driver gathers a few locks, then checks
whether data is present and in the non-blocking case returns -EAGAIN,
otherwise waits for data to become available.

In the case of multiple readers, acquiring the locks might however
block, so I'm not sure whether it'd be better to check for non-blocking
first, and acquire the locks with trylock in this case, returning
-EAGAIN in case we fail to acquire any.

The semantic difference seems to be minimal: I believe that it is
acceptable to return -EAGAIN from read even if a previous poll()
suggested that the fd was now readable. Blocking on a non-blocking
read() until other tasks reading from the same fd have left the kernel
seems more like an optimization to me, saving a few syscalls if the
other reader doesn't read all the bytes.

The obvious consistency problem with multiple unsynchronized readers
aside: is that optimization worth a (short) block inside a non-blocking
read?

   Simon
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ