mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-11 16:00:50 -07:00
qemu-nbd: move client handling to nbd.c
This patch sets up the fd handler in nbd.c instead of qemu-nbd.c. It introduces NBDClient, which wraps the arguments to nbd_trip in a single structure, so that we can add a notifier to it. This way, qemu-nbd can know about disconnections. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a61c67828d
commit
1743b51586
3 changed files with 66 additions and 15 deletions
14
qemu-nbd.c
14
qemu-nbd.c
|
|
@ -249,15 +249,10 @@ static int nbd_can_accept(void *opaque)
|
|||
return nb_fds < shared;
|
||||
}
|
||||
|
||||
static void nbd_read(void *opaque)
|
||||
static void nbd_client_closed(NBDClient *client)
|
||||
{
|
||||
int fd = (uintptr_t) opaque;
|
||||
|
||||
if (nbd_trip(exp, fd) != 0) {
|
||||
qemu_set_fd_handler2(fd, NULL, NULL, NULL, NULL);
|
||||
close(fd);
|
||||
nb_fds--;
|
||||
}
|
||||
nb_fds--;
|
||||
qemu_notify_event();
|
||||
}
|
||||
|
||||
static void nbd_accept(void *opaque)
|
||||
|
|
@ -268,8 +263,7 @@ static void nbd_accept(void *opaque)
|
|||
|
||||
int fd = accept(server_fd, (struct sockaddr *)&addr, &addr_len);
|
||||
nbd_started = true;
|
||||
if (fd != -1 && nbd_negotiate(exp, fd) != -1) {
|
||||
qemu_set_fd_handler2(fd, NULL, nbd_read, NULL, (void *) (intptr_t) fd);
|
||||
if (fd != -1 && nbd_client_new(exp, fd, nbd_client_closed)) {
|
||||
nb_fds++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue