fix short copy handling in copy_mc_pipe_to_iter()
[sfrench/cifs-2.6.git] / drivers / block / rnbd / rnbd-srv-dev.c
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
15 struct 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         bdevname(dev->bdev, dev->name);
32
33         return dev;
34
35 err:
36         kfree(dev);
37         return ERR_PTR(ret);
38 }
39
40 void rnbd_dev_close(struct rnbd_dev *dev)
41 {
42         blkdev_put(dev->bdev, dev->blk_open_flags);
43         kfree(dev);
44 }