mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 14:43:58 +08:00
c378f70adb
Currently, when a disconnect is requested by the user (via NBD_DISCONNECT ioctl) the return from NBD_DO_IT is undefined (it is usually one of several error codes). This means that nbd-client does not know if a manual disconnect was performed or whether a network error occurred. Because of this, nbd-client's persist mode (which tries to reconnect after error, but not after manual disconnect) does not always work correctly. This change fixes this by causing NBD_DO_IT to always return 0 if a user requests a disconnect. This means that nbd-client can correctly either persist the connection (if an error occurred) or disconnect (if the user requested it). Signed-off-by: Paul Clements <paul.clements@steeleye.com> Acked-by: Rob Landley <rob@landley.net> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/*
|
|
* 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
|
|
* 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
|
|
* Made nbd_end_request() use the io_request_lock
|
|
* 2001 Copyright (C) Steven Whitehouse
|
|
* New nbd_end_request() for compatibility with new linux block
|
|
* layer code.
|
|
* 2003/06/24 Louis D. Langholtz <ldl@aros.net>
|
|
* Removed unneeded blksize_bits field from nbd_device struct.
|
|
* Cleanup PARANOIA usage & code.
|
|
* 2004/02/19 Paul Clements
|
|
* Removed PARANOIA, plus various cleanup and comments
|
|
*/
|
|
#ifndef LINUX_NBD_H
|
|
#define LINUX_NBD_H
|
|
|
|
|
|
#include <linux/wait.h>
|
|
#include <linux/mutex.h>
|
|
#include <uapi/linux/nbd.h>
|
|
|
|
struct request;
|
|
|
|
struct nbd_device {
|
|
int flags;
|
|
int harderror; /* Code of hard error */
|
|
struct socket * sock;
|
|
struct file * file; /* If == NULL, device is not ready, yet */
|
|
int magic;
|
|
|
|
spinlock_t queue_lock;
|
|
struct list_head queue_head; /* Requests waiting result */
|
|
struct request *active_req;
|
|
wait_queue_head_t active_wq;
|
|
struct list_head waiting_queue; /* Requests to be sent */
|
|
wait_queue_head_t waiting_wq;
|
|
|
|
struct mutex tx_lock;
|
|
struct gendisk *disk;
|
|
int blksize;
|
|
u64 bytesize;
|
|
pid_t pid; /* pid of nbd-client, if attached */
|
|
int xmit_timeout;
|
|
int disconnect; /* a disconnect has been requested by user */
|
|
};
|
|
|
|
#endif
|