summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-02-02 14:41:21 -0900
committerKent Overstreet <kent.overstreet@gmail.com>2017-02-02 17:25:59 -0900
commitab88049a08bf734b9a6c9f2deae39fbd0c933192 (patch)
treebf668bddeb58b41ff2f3e9d25dc21c82f80e2877
parent379520ee87b92c51f1db1e5c19379d738a7c207a (diff)
linux shim: return an error on failure to open
-rw-r--r--linux/blkdev.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/linux/blkdev.c b/linux/blkdev.c
index b4ff451..0bae9b0 100644
--- a/linux/blkdev.c
+++ b/linux/blkdev.c
@@ -117,7 +117,7 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
void *holder)
{
struct block_device *bdev;
- int flags = O_DIRECT;
+ int fd, flags = O_DIRECT;
if ((mode & (FMODE_READ|FMODE_WRITE)) == (FMODE_READ|FMODE_WRITE))
flags = O_RDWR;
@@ -129,17 +129,19 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
if (mode & FMODE_EXCL)
flags |= O_EXCL;
+ fd = open(path, flags);
+ if (fd < 0)
+ return ERR_PTR(-errno);
+
bdev = malloc(sizeof(*bdev));
memset(bdev, 0, sizeof(*bdev));
strncpy(bdev->name, path, sizeof(bdev->name));
bdev->name[sizeof(bdev->name) - 1] = '\0';
- bdev->bd_fd = open(path, flags);
+ bdev->bd_fd = fd;
bdev->bd_holder = holder;
- bdev->bd_disk = &bdev->__bd_disk;
-
- BUG_ON(bdev->bd_fd < 0);
+ bdev->bd_disk = &bdev->__bd_disk;
return bdev;
}