Re: [RFC][PATCH 0/9] File descriptor hot-unplug support

Jamie Lokier
2009-04-14T15:08:14Z

Eric W. Biederman wrote:
> > I don't have anything at hand but multithread/process server accepting
> > on the same socket comes to mind. I don't think it would be a very
> > rare thing. If you confine the scope to character devices or sysfs,
> > it could be quite rare tho.
>
> Yes. I think I can safely exclude sockets, and not bother with
> reference counting them.

Good idea. As well as many processes calling accept(), it's not
unusual to have two threads or processes for reading and writing
concurrently to TCP sockets, and to have a single UDP socket shared
among threads/processes for sendto.

> The only strong evidence I have that multi-threading on a single file
> descriptor is likely to be common is that we have pread and pwrite
> syscalls. At the same time the number of races we have in struct file
> if it is accessed by multiple threads at the same time, suggests
> that at least for cases where you have an offset it doesn't happen often.

Notice the preadv and pwritev syscalls added recently? They were
added because QEMU and KVM need them for performance. Those programs
have multiple threads doing I/O to the same file concurrently. It's
like a poor man's AIO, except it's more reliable than real Linux AIO :-)

Databases probably should use concurrent p{read,write}{,v} if they're
not using direct I/O and AIO. I'm not sure if the well-known
databases do. In the past there have been some poor quality
"emulations" of those syscalls prone to races, on Linux and BSD I believe.

What are the races you've noticed?

-- Jamie