diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-02-02 14:41:21 -0900 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-02-02 17:25:59 -0900 |
commit | ab88049a08bf734b9a6c9f2deae39fbd0c933192 (patch) | |
tree | bf668bddeb58b41ff2f3e9d25dc21c82f80e2877 | |
parent | 379520ee87b92c51f1db1e5c19379d738a7c207a (diff) |
linux shim: return an error on failure to open
-rw-r--r-- | linux/blkdev.c | 12 |
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; } |