Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * RDMA Network Block Driver
0004  *
0005  * Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved.
0006  * Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved.
0007  * Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved.
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 }