mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-02-10 00:00:04 +03:00
linux shim: return an error on failure to open
This commit is contained in:
parent
379520ee87
commit
ab88049a08
@ -117,7 +117,7 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
|
|||||||
void *holder)
|
void *holder)
|
||||||
{
|
{
|
||||||
struct block_device *bdev;
|
struct block_device *bdev;
|
||||||
int flags = O_DIRECT;
|
int fd, flags = O_DIRECT;
|
||||||
|
|
||||||
if ((mode & (FMODE_READ|FMODE_WRITE)) == (FMODE_READ|FMODE_WRITE))
|
if ((mode & (FMODE_READ|FMODE_WRITE)) == (FMODE_READ|FMODE_WRITE))
|
||||||
flags = O_RDWR;
|
flags = O_RDWR;
|
||||||
@ -129,18 +129,20 @@ struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
|
|||||||
if (mode & FMODE_EXCL)
|
if (mode & FMODE_EXCL)
|
||||||
flags |= O_EXCL;
|
flags |= O_EXCL;
|
||||||
|
|
||||||
|
fd = open(path, flags);
|
||||||
|
if (fd < 0)
|
||||||
|
return ERR_PTR(-errno);
|
||||||
|
|
||||||
bdev = malloc(sizeof(*bdev));
|
bdev = malloc(sizeof(*bdev));
|
||||||
memset(bdev, 0, sizeof(*bdev));
|
memset(bdev, 0, sizeof(*bdev));
|
||||||
|
|
||||||
strncpy(bdev->name, path, sizeof(bdev->name));
|
strncpy(bdev->name, path, sizeof(bdev->name));
|
||||||
bdev->name[sizeof(bdev->name) - 1] = '\0';
|
bdev->name[sizeof(bdev->name) - 1] = '\0';
|
||||||
|
|
||||||
bdev->bd_fd = open(path, flags);
|
bdev->bd_fd = fd;
|
||||||
bdev->bd_holder = holder;
|
bdev->bd_holder = holder;
|
||||||
bdev->bd_disk = &bdev->__bd_disk;
|
bdev->bd_disk = &bdev->__bd_disk;
|
||||||
|
|
||||||
BUG_ON(bdev->bd_fd < 0);
|
|
||||||
|
|
||||||
return bdev;
|
return bdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user