From: Sami Kerola Date: Wed, 5 Oct 2011 13:37:48 +0000 (+0200) Subject: lsblk: inform about depencency to /sys/dev/block X-Git-Tag: v2.21-rc1~349 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f65b3bb6257bb0885fd8bfe3bd6f0f4b2739d4b4;p=thirdparty%2Futil-linux.git lsblk: inform about depencency to /sys/dev/block The lsblk depends on /sys/dev/block/ symlinks, which appeared in kernel 2.6.27. Users with old, or non-sysfs configured, kernel got ealier message lsblk: md0: failed to initialize sysfs handler lsblk: xvda: failed to initialize sysfs handler [...] that I found a little too difficult to understand. This patch will change the message to lsblk: failed to access sysfs directory: /sys/dev/block: No such file or directory and informs in manual page what could be reason to that. [kzak@redhat.com: - use access() rather than opendir()] Signed-off-by: Sami Kerola Signed-off-by: Karel Zak --- diff --git a/misc-utils/lsblk.8 b/misc-utils/lsblk.8 index 72085ac28d..028b19f108 100644 --- a/misc-utils/lsblk.8 +++ b/misc-utils/lsblk.8 @@ -63,6 +63,15 @@ This option is equivalent to "-o NAME,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,RO .SH NOTES For the partitions are some information (e.g. queue attributes) inherited from parental device. +.PP +The +.B lsblk +needs to be able to lookup sysfs path by major:minor, which is done +done by using +.BR /sys/dev/block . +The block sysfs appeared in kernel 2.6.27 (October 2008). In case of +problem with new enough kernel check that CONFIG_SYSFS was enabled at +the time of kernel build. .SH AUTHORS .nf Milan Broz diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c index f9c06fe075..74a1850878 100644 --- a/misc-utils/lsblk.c +++ b/misc-utils/lsblk.c @@ -947,6 +947,13 @@ errx_mutually_exclusive(const char *opts) errx(EXIT_FAILURE, "%s %s", opts, _("options are mutually exclusive")); } +static void check_sysdevblock(void) +{ + if (access(_PATH_SYS_DEVBLOCK, R_OK) != 0) + err(EXIT_FAILURE, _("failed to access sysfs directory: %s"), + _PATH_SYS_DEVBLOCK); +} + int main(int argc, char *argv[]) { struct lsblk _ls; @@ -1059,6 +1066,8 @@ int main(int argc, char *argv[]) } } + check_sysdevblock(); + if (!ncolumns) { columns[ncolumns++] = COL_NAME; columns[ncolumns++] = COL_MAJMIN;