Hi all, as highlighted by Helmut (see "Re: btrfs still looks for not existing devices"), some btrfs tools (like mkfs.btrfs, btrfsck, btrfs-image, btrfs- label...) have the habit to scan the /dev directories looking for a valid block device in order to assemble all the devices of a btrfs filesystems.
Some systems doesn't use udev, so they have a static /dev with a lot of block
device nodes without a real device. Another source of error is that some
devices return ENOMEDIUM (No medium found) when they haven't a medium (think
about a CD with the tray empty, or a SD/CF reader). These two kind of errors
are reported by these tools.
I think that it is perfectly safe to ignore these error because the fact that
a device doesn't exist or a CD is empty is not an error which should be
handled and/or reported when the system is trying to assemble the devices for
a filesystem.
In any case if a device *needed* for a btrfs filesystem is missing, an error is
raised.
The patch enclosed allow to ignore the errors:
- ENXIO (device don't exists)
- ENOMEDIUM (No medium found)
avoiding spurious messages during a scanning of the /dev directory.
I have to highlight that if a CDROM/DVD is inserted, the btrfs tools read the
cdrom, and this is a very slow operation.
Hugo, Chris,
please apply.
Anyway comments are welcome.
BR
P.S.
you can pull this patch from the following repository:
http://cassiopea.homelinux.net/git/btrfs-progs-unstable.git
branch
skip-not-existent-devices
--
gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo) <[email protected]>
Key fingerprint = 4769 7E51 5293 D36C 814E C054 BF04 F161 3DC5 0512commit 3635fcf3f7358f006a5025b9773034088bdd01fd Author: Goffredo Baroncelli <[email protected]> Date: Fri Oct 21 19:00:28 2011 +0200 Ignore the error ENXIO and ENOMEDIUM during a devs scan Ignore the error ENXIO (device don't exists) and ENOMEDIUM ( No medium found -> like a cd tray empty) in the function btrfs_scan_one_dir. This avoids spurios errors due to an empty CD or a block device node without a device (which is frequent in a static /dev). Signed-off-by: Goffredo Baroncelli <[email protected]> diff --git a/utils.c b/utils.c index 86c643c..5761e47 100644 --- a/utils.c +++ b/utils.c @@ -997,8 +997,14 @@ again: } fd = open(fullpath, O_RDONLY); if (fd < 0) { - fprintf(stderr, "failed to read %s: %s\n", fullpath, - strerror(errno)); + /* ignore the following errors: + ENXIO (device don't exists) + ENOMEDIUM (No medium found -> + like a cd tray empty) + */ + if(errno != ENXIO && errno != ENOMEDIUM) + fprintf(stderr, "failed to read %s: %s\n", + fullpath, strerror(errno)); continue; } ret = btrfs_scan_one_device(fd, fullpath, &tmp_devices,
signature.asc
Description: This is a digitally signed message part.
