Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * RDMA Network Block Driver
4 *
5 * Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved.
6 * Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved.
7 * Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved.
8 */
9#undef pr_fmt
10#define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt
11
12#include "rnbd-srv-dev.h"
13#include "rnbd-log.h"
14
15struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags)
16{
17 struct rnbd_dev *dev;
18 int ret;
19
20 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
21 if (!dev)
22 return ERR_PTR(-ENOMEM);
23
24 dev->blk_open_flags = flags;
25 dev->bdev = blkdev_get_by_path(path, flags, THIS_MODULE);
26 ret = PTR_ERR_OR_ZERO(dev->bdev);
27 if (ret)
28 goto err;
29
30 dev->blk_open_flags = flags;
31
32 return dev;
33
34err:
35 kfree(dev);
36 return ERR_PTR(ret);
37}
38
39void rnbd_dev_close(struct rnbd_dev *dev)
40{
41 blkdev_put(dev->bdev, dev->blk_open_flags);
42 kfree(dev);
43}