summaryrefslogtreecommitdiffstats
path: root/kernel/fops.c
diff options
context:
space:
mode:
authorLars Müller2008-03-01 19:30:38 +0100
committerLars Müller2008-03-01 19:30:38 +0100
commit93b9103f7383d400616d222606c294e07b16e1aa (patch)
tree611a39f7bc1d1dd5a4335157ef95c101d64dddc8 /kernel/fops.c
downloaddnbd2-93b9103f7383d400616d222606c294e07b16e1aa.tar.gz
dnbd2-93b9103f7383d400616d222606c294e07b16e1aa.tar.xz
dnbd2-93b9103f7383d400616d222606c294e07b16e1aa.zip
Import dnbd* from the former openslx-contrib repo as of revision 92.
openslx-contrib is currently read only and will get removed in some days. git-svn-id: http://svn.openslx.org/svn/openslx/contrib/dnbd2/trunk@1592 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'kernel/fops.c')
-rw-r--r--kernel/fops.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/kernel/fops.c b/kernel/fops.c
new file mode 100644
index 0000000..c098e13
--- /dev/null
+++ b/kernel/fops.c
@@ -0,0 +1,43 @@
+/*
+ * kernel/fops.c
+ */
+
+
+#include "dnbd2.h"
+#include "fops.h"
+
+
+struct block_device_operations dnbd2_fops = {
+ .owner = THIS_MODULE,
+ .open = dnbd2_open,
+ .release = dnbd2_release,
+};
+
+
+int dnbd2_open(struct inode *inode, struct file *file)
+{
+ dnbd2_device_t *dev = inode->i_bdev->bd_disk->private_data;
+ if (down_interruptible(&dev->config_mutex))
+ return -EBUSY;
+
+ /* FIXME: How do we put this add/start_device? */
+ if (set_blocksize(inode->i_bdev, DNBD2_BLOCK_SIZE)) {
+ up(&dev->config_mutex);
+ return -EBUSY;
+ }
+
+ atomic_inc(&dev->refcnt);
+ up(&dev->config_mutex);
+ return 0;
+}
+
+
+int dnbd2_release(struct inode *inode, struct file *file)
+{
+ dnbd2_device_t *dev = inode->i_bdev->bd_disk->private_data;
+ if (down_interruptible(&dev->config_mutex))
+ return -EBUSY;
+ atomic_dec(&dev->refcnt);
+ up(&dev->config_mutex);
+ return 0;
+}