diff options
author | Paul Clements <paul.clements@steeleye.com> | 2007-10-16 23:27:37 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-17 08:42:55 -0700 |
commit | 7fdfd4065c264bddd2d9277470a6a99d34e01bef (patch) | |
tree | e2423a0338bf5d48f24bca1091e3069508f45f01 /include/linux/nbd.h | |
parent | 4b86a872561ad052bdc6f092a06807822d26beb1 (diff) | |
download | kernel-crypto-7fdfd4065c264bddd2d9277470a6a99d34e01bef.tar.gz kernel-crypto-7fdfd4065c264bddd2d9277470a6a99d34e01bef.tar.xz kernel-crypto-7fdfd4065c264bddd2d9277470a6a99d34e01bef.zip |
NBD: allow hung network I/O to be cancelled
Allow NBD I/O to be cancelled when a network outage occurs. Previously, I/O
would just hang, and if enough I/O was hung in nbd, the system (at least
user-level) would completely hang until a TCP timeout (default, 15 minutes)
occurred.
The patch introduces a new ioctl NBD_SET_TIMEOUT that allows a transmit
timeout value (in seconds) to be specified. Any network send that exceeds the
timeout will be cancelled and the nbd connection will be shut down. I've
tested with various timeout values and 6 seconds seems to be a good choice for
the timeout. If the NBD_SET_TIMEOUT ioctl is not called, you get the old (I/O
hang) behavior.
Signed-off-by: Paul Clements <paul.clements@steeleye.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/nbd.h')
-rw-r--r-- | include/linux/nbd.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/nbd.h b/include/linux/nbd.h index 0f3e6930254..cc2b47240a8 100644 --- a/include/linux/nbd.h +++ b/include/linux/nbd.h @@ -26,6 +26,7 @@ #define NBD_PRINT_DEBUG _IO( 0xab, 6 ) #define NBD_SET_SIZE_BLOCKS _IO( 0xab, 7 ) #define NBD_DISCONNECT _IO( 0xab, 8 ) +#define NBD_SET_TIMEOUT _IO( 0xab, 9 ) enum { NBD_CMD_READ = 0, @@ -65,6 +66,7 @@ struct nbd_device { int blksize; u64 bytesize; pid_t pid; /* pid of nbd-client, if attached */ + int xmit_timeout; }; #endif |