Messages in this thread |  | | Date | Mon, 30 Jan 2012 22:56:38 +0000 | From | Al Viro <> | Subject | Re: sysfs regression: wrong link counts |
| |
On Mon, Jan 30, 2012 at 10:43:50PM +0000, Al Viro wrote: > On Mon, Jan 30, 2012 at 02:27:17PM -0800, Greg KH wrote: > > On Mon, Jan 30, 2012 at 10:10:59PM +0000, Alan Cox wrote: > > > > Isn't there some other "proper" way of doing this in userspace, or is > > > > this really the correct way? > > > > > > You can look at the S_IFMT bits and stuff however link count indicating > > > number of subdirectories is a standard Unix thing and used by many quite > > > mundane tools as an optimisation. > > > > Ah, yeah, that is easier. > > > > Eric, care to fix this or want me to revert it? > > Fix _what_? Userland shite quoted upthread? Because that's where the bug > is - the mundane tools mentioned by Alan treat 1 in st_nlink as "no > information about the number of subdirectories". And shite might be too > mild a term for the little gem in question, really...
To repeat this piece of bogosity for those who might've missed it:
/* returns !0 if sysfs filesystem was found, 0 otherwise */ int sensors_init_sysfs(void) { struct stat statbuf;
snprintf(sensors_sysfs_mount, NAME_MAX, "%s", "/sys"); if (stat(sensors_sysfs_mount, &statbuf) < 0 || statbuf.st_nlink <= 2) /* Empty directory */ return 0;
return 1; }
which is completely bogus - contrary to what it says in comments, it does *not* check anything about sysfs (or directories being empty). Checking that sysfs is mounted on /sys could be done by statfs(2) and checking ->f_type, or, considering what the code in lib/sysfs.c is doing, just checking that /sys/class is readable and failing otherwise.
Sigh...
|  |