rnbd-srv-dev.c (977B)
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 bdevname(dev->bdev, dev->name); 32 33 return dev; 34 35err: 36 kfree(dev); 37 return ERR_PTR(ret); 38} 39 40void rnbd_dev_close(struct rnbd_dev *dev) 41{ 42 blkdev_put(dev->bdev, dev->blk_open_flags); 43 kfree(dev); 44}