summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2024-01-06 17:54:06 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-01-10 22:27:22 -0500
commitf6bdf318437339b1248ab2fd20139d28d9514a0e (patch)
tree349ddfc4abaf1e9db2dffcc34bc62b89948690b5 /linux
parent226bade565776b4f67d65b62ae66d63025cf76d5 (diff)
kill bd_buffered_fd
this gets us back down to a single fd for opening block devices, which means we can use O_EXCL. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'linux')
-rw-r--r--linux/blkdev.c13
1 files changed, 1 insertions, 12 deletions
diff --git a/linux/blkdev.c b/linux/blkdev.c
index 611c821e..61f23362 100644
--- a/linux/blkdev.c
+++ b/linux/blkdev.c
@@ -173,7 +173,7 @@ struct block_device *blkdev_get_by_path(const char *path, blk_mode_t mode,
void *holder, const struct blk_holder_ops *hop)
{
struct block_device *bdev;
- int fd, buffered_fd, flags = 0;
+ int fd, flags = 0;
if ((mode & (BLK_OPEN_READ|BLK_OPEN_WRITE)) == (BLK_OPEN_READ|BLK_OPEN_WRITE))
flags = O_RDWR;
@@ -185,22 +185,12 @@ struct block_device *blkdev_get_by_path(const char *path, blk_mode_t mode,
if (!(mode & BLK_OPEN_BUFFERED))
flags |= O_DIRECT;
-#if 0
- /* using O_EXCL doesn't work with opening twice for an O_SYNC fd: */
if (mode & BLK_OPEN_EXCL)
flags |= O_EXCL;
-#endif
- buffered_fd = open(path, flags & ~O_DIRECT);
- if (buffered_fd < 0)
- return ERR_PTR(-errno);
fd = open(path, flags);
if (fd < 0)
- fd = dup(buffered_fd);
- if (fd < 0) {
- close(buffered_fd);
return ERR_PTR(-errno);
- }
bdev = malloc(sizeof(*bdev));
memset(bdev, 0, sizeof(*bdev));
@@ -210,7 +200,6 @@ struct block_device *blkdev_get_by_path(const char *path, blk_mode_t mode,
bdev->bd_dev = xfstat(fd).st_rdev;
bdev->bd_fd = fd;
- bdev->bd_buffered_fd = buffered_fd;
bdev->bd_holder = holder;
bdev->bd_disk = &bdev->__bd_disk;
bdev->bd_disk->bdi = &bdev->bd_disk->__bdi;