qemu/block
Stefan Hajnoczi e04fb07fd1 rbd: switch from pipe to QEMUBH completion notification
rbd callbacks are called from non-QEMU threads.  Up until now a pipe was
used to signal completion back to the QEMU iothread.

The pipe writer code handles EAGAIN using select(2).  The select(2) API
is not scalable since fd_set size is static.  FD_SET() can write beyond
the end of fd_set if the file descriptor number is too high.  (QEMU's
main loop uses poll(2) to avoid this issue with select(2).)

Since the pipe itself is quite clumsy to use and QEMUBH is now
thread-safe, just schedule a BH from the rbd callback function.  This
way we can simplify I/O completion in addition to eliminating the
potential FD_SET() crash when file descriptor numbers become too high.

Crash scenario: QEMU already has 1024 file descriptors open.  Hotplug an
rbd drive and get the pipe writer to take the select(2) code path.

Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Tested-by: Josh Durgin <josh.durgin@inktank.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2014-01-22 12:07:16 +01:00
..
backup.c block: introduce BDRV_REQ_MAY_UNMAP request flag 2013-11-28 10:30:51 +01:00
blkdebug.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
blkverify.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
bochs.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
cloop.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
commit.c commit: Remove unused check 2013-12-20 16:26:16 +01:00
cow.c COW: Extend checking allocated bits to beyond one sector 2013-11-29 13:40:36 +01:00
curl.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
dmg.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
gluster.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
iscsi.c Merge remote branch 'luiz/queue/qmp' into qmpq 2014-01-14 12:10:08 +10:00
linux-aio.c aio: drop io_flush argument 2013-08-19 15:52:19 +02:00
Makefile.objs Split nbd block client code 2013-12-16 10:12:20 +01:00
mirror.c commit: Support commit active layer 2013-12-20 16:26:16 +01:00
nbd-client.c nbd: avoid uninitialized warnings 2013-12-16 10:12:20 +01:00
nbd-client.h nbd: pass export name as init argument 2013-12-16 10:12:20 +01:00
nbd.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
parallels.c bdrv: Use "Error" for opening images 2013-09-12 10:12:47 +02:00
qapi.c qapi: Change BlockDirtyInfo to list 2013-11-29 13:40:36 +01:00
qcow2-cache.c qcow2: Use negated overflow check mask 2013-10-11 16:50:00 +02:00
qcow2-cluster.c qcow2: use start_of_cluster() and offset_into_cluster() everywhere 2013-12-06 16:53:50 +01:00
qcow2-refcount.c qcow2: use start_of_cluster() and offset_into_cluster() everywhere 2013-12-06 16:53:50 +01:00
qcow2-snapshot.c snapshot: distinguish id and name in load_tmp 2013-12-04 15:19:00 +01:00
qcow2.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
qcow2.h snapshot: distinguish id and name in load_tmp 2013-12-04 15:19:00 +01:00
qcow.c block: Error parameter for create functions 2013-09-12 10:12:48 +02:00
qed-check.c qed: mark image clean after repair succeeds 2012-08-10 10:25:12 +02:00
qed-cluster.c
qed-gencb.c
qed-l2-cache.c qed: do not evict in-use L2 table cache entries 2012-03-12 15:14:06 +01:00
qed-table.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qed.c block drivers: expose requirement for write same alignment from formats 2013-12-03 15:26:49 +01:00
qed.h block: qed - use QEMU_PACKED for on-disk structures 2013-09-25 20:51:15 +02:00
raw_bsd.c block/raw: copy BlockLimits on raw_open 2013-11-28 10:30:51 +01:00
raw-aio.h raw-posix: add support for write_zeroes on XFS and block devices 2013-12-03 15:26:49 +01:00
raw-posix.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
raw-win32.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
rbd.c rbd: switch from pipe to QEMUBH completion notification 2014-01-22 12:07:16 +01:00
sheepdog.c Merge remote branch 'luiz/queue/qmp' into qmpq 2014-01-14 12:10:08 +10:00
snapshot.c qemu-nbd: support internal snapshot export 2013-12-04 15:19:00 +01:00
ssh.c bdrv: Use "Error" for creating images 2013-09-12 10:12:48 +02:00
stream.c block/stream: Don't stream unbacked devices 2013-11-28 11:39:31 +01:00
vdi.c block drivers: add discard/write_zeroes properties to bdrv_get_info implementation 2013-12-03 15:26:49 +01:00
vhdx-endian.c block: vhdx - move more endian translations to vhdx-endian.c 2013-11-07 13:58:59 +01:00
vhdx-log.c block: vhdx - improve error message, and .bdrv_check implementation 2013-12-20 09:11:58 +01:00
vhdx.c block: vhdx - improve error message, and .bdrv_check implementation 2013-12-20 09:11:58 +01:00
vhdx.h block: vhdx - improve error message, and .bdrv_check implementation 2013-12-20 09:11:58 +01:00
vmdk.c vmdk: Allow vmdk_create to work with protocol 2013-12-20 13:56:56 +01:00
vpc.c block drivers: add discard/write_zeroes properties to bdrv_get_info implementation 2013-12-03 15:26:49 +01:00
vvfat.c qemu-option: Remove qemu_opts_create_nofail 2014-01-06 15:02:30 -05:00
win32-aio.c win32-aio: drop win32_aio_flush_cb() 2013-08-22 22:05:04 +02:00