0001
0002
0003
0004
0005
0006
0007
0008
0009 #undef pr_fmt
0010 #define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt
0011
0012 #include "rnbd-srv-dev.h"
0013 #include "rnbd-log.h"
0014
0015 struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags)
0016 {
0017 struct rnbd_dev *dev;
0018 int ret;
0019
0020 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
0021 if (!dev)
0022 return ERR_PTR(-ENOMEM);
0023
0024 dev->blk_open_flags = flags;
0025 dev->bdev = blkdev_get_by_path(path, flags, THIS_MODULE);
0026 ret = PTR_ERR_OR_ZERO(dev->bdev);
0027 if (ret)
0028 goto err;
0029
0030 dev->blk_open_flags = flags;
0031
0032 return dev;
0033
0034 err:
0035 kfree(dev);
0036 return ERR_PTR(ret);
0037 }
0038
0039 void rnbd_dev_close(struct rnbd_dev *dev)
0040 {
0041 blkdev_put(dev->bdev, dev->blk_open_flags);
0042 kfree(dev);
0043 }