From a6c20b5ee46c39cf5c9e86bc6cd938ba56909dff Mon Sep 17 00:00:00 2001 From: Pali Rohár Date: Thu, 8 Feb 2018 19:48:34 +0100 Subject: disk: Open whole block device with O_NONBLOCK This would simplify handling of ENOMEDIUM error. --- src/disk.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/disk.c b/src/disk.c index bb8ae02..2db197b 100644 --- a/src/disk.c +++ b/src/disk.c @@ -118,10 +118,9 @@ int disk_open_dev(int maj, int min, int partition, int readonly) { blkdev[len] = 0; - fd = open(blkdev, (readonly ? O_RDONLY : O_RDWR) | O_EXCL); + fd = open(blkdev, (readonly ? O_RDONLY : O_RDWR) | O_EXCL | O_NONBLOCK); if ( fd < 0 ) { - if ( errno != ENOMEDIUM ) - ERROR_INFO("Cannot open block device %s", blkdev); + ERROR_INFO("Cannot open block device %s", blkdev); return -1; } else { if ( fstat(fd, &st) != 0 || ! S_ISBLK(st.st_mode) || makedev(maj, min) != st.st_rdev ) { @@ -155,10 +154,9 @@ int disk_open_dev(int maj, int min, int partition, int readonly) { } if ( fd < 0 && errno == ENOENT ) { blkdev[len] = 0; - fd = open(blkdev, O_RDONLY); + fd = open(blkdev, O_RDONLY | O_NONBLOCK); if ( fd < 0 ) { - if ( errno != ENOMEDIUM ) - ERROR_INFO("Cannot open block device %s", blkdev); + ERROR_INFO("Cannot open block device %s", blkdev); } else { close(fd); ERROR("Block device %s does not have partitions", blkdev); -- cgit v1.2.3