diff options
author | Lars Müller | 2008-03-01 19:30:38 +0100 |
---|---|---|
committer | Lars Müller | 2008-03-01 19:30:38 +0100 |
commit | 93b9103f7383d400616d222606c294e07b16e1aa (patch) | |
tree | 611a39f7bc1d1dd5a4335157ef95c101d64dddc8 /kernel/fops.c | |
download | dnbd2-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.c | 43 |
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; +} |