From b7fd7219ce4fc73939c912d4a02f5b8e4301ede7 Mon Sep 17 00:00:00 2001 From: Johann Latocha Date: Thu, 19 Jan 2012 17:20:02 +0100 Subject: First working version :) --- src/kernel/blk.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/kernel/blk.c (limited to 'src/kernel/blk.c') diff --git a/src/kernel/blk.c b/src/kernel/blk.c new file mode 100644 index 0000000..bf7f4e8 --- /dev/null +++ b/src/kernel/blk.c @@ -0,0 +1,76 @@ +/* + * This file is part of the Distributed Network Block Device 3 + * + * Copyright(c) 2011-2012 Johann Latocha + * + * This file may be licensed under the terms of of the + * GNU General Public License Version 2 (the ``GPL''). + * + * Software distributed under the License is distributed + * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either + * express or implied. See the GPL for the specific language + * governing rights and limitations. + * + * You should have received a copy of the GPL along with this + * program. If not, go to http://www.gnu.org/licenses/gpl.html + * or write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "blk.h" +#include "net.h" + +struct block_device_operations dnbd3_blk_ops = +{ .owner = THIS_MODULE, .ioctl = dnbd3_blk_ioctl, }; + +int dnbd3_blk_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, + unsigned long arg) +{ + switch (cmd) + { + case IOCTL_SET_HOST: + _host = (char *) arg; + break; + + case IOCTL_SET_PORT: + _port = (char *) arg; + break; + + case IOCTL_CONNECT: + dnbd3_net_connect(); + break; + case BLKFLSBUF: + break; + + default: + return -1; + + } + return 0; +} + +void dnbd3_blk_request(struct request_queue *q) +{ + struct request *req; + + if (!_sock) + return; + + while ((req = blk_fetch_request(q)) != NULL) + { + if (req->cmd_type != REQ_TYPE_FS) + { + __blk_end_request_all(req, 0); + continue; + } + + if (rq_data_dir(req) == READ) + { + list_add_tail(&req->queuelist, &_request_queue_send); + spin_unlock_irq(q->queue_lock); + wake_up(&_process_queue_send); + spin_lock_irq(q->queue_lock); + } + } +} -- cgit v1.2.3-55-g7522