2 * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
3 * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
4 * Made nbd_end_request() use the io_request_lock
5 * 2001 Copyright (C) Steven Whitehouse
6 * New nbd_end_request() for compatibility with new linux block
13 #define NBD_SET_SOCK _IO( 0xab, 0 )
14 #define NBD_SET_BLKSIZE _IO( 0xab, 1 )
15 #define NBD_SET_SIZE _IO( 0xab, 2 )
16 #define NBD_DO_IT _IO( 0xab, 3 )
17 #define NBD_CLEAR_SOCK _IO( 0xab, 4 )
18 #define NBD_CLEAR_QUE _IO( 0xab, 5 )
19 #define NBD_PRINT_DEBUG _IO( 0xab, 6 )
20 #define NBD_SET_SIZE_BLOCKS _IO( 0xab, 7 )
21 #define NBD_DISCONNECT _IO( 0xab, 8 )
25 #include <linux/locks.h>
26 #include <asm/semaphore.h>
28 #define LOCAL_END_REQUEST
30 #include <linux/blk.h>
33 extern int requests_in;
34 extern int requests_out;
38 nbd_end_request(struct request *req)
40 struct buffer_head *bh;
43 int uptodate = (req->errors == 0) ? 1 : 0;
48 spin_lock_irqsave(&io_request_lock, flags);
49 while((bh = req->bh) != NULL) {
50 nsect = bh->b_size >> 9;
51 blk_finished_io(nsect);
52 req->bh = bh->b_reqnext;
54 bh->b_end_io(bh, uptodate);
56 blkdev_release_request(req);
57 spin_unlock_irqrestore(&io_request_lock, flags);
65 int harderror; /* Code of hard error */
66 #define NBD_READ_ONLY 0x0001
67 #define NBD_WRITE_NOCHK 0x0002
69 struct file * file; /* If == NULL, device is not ready, yet */
70 int magic; /* FIXME: not if debugging is off */
71 spinlock_t queue_lock;
72 struct list_head queue_head; /* Requests are added here... */
73 struct semaphore tx_lock;
77 /* This now IS in some kind of include file... */
79 /* These are send over network in request/reply magic field */
81 #define NBD_REQUEST_MAGIC 0x25609513
82 #define NBD_REPLY_MAGIC 0x67446698
83 /* Do *not* use magics: 0x12560953 0x96744668. */
86 * This is packet used for communication between client and
87 * server. All data are in network byte order.
91 u32 type; /* == READ || == WRITE */
97 __attribute__ ((packed))
103 u32 error; /* 0 = ok, else error */
104 char handle[8]; /* handle you got from request */