In 8.0-RELEASE-p1 if I try to execute this:
cat /compat/linux/proc/cpuinfo > ~/cpuinfo.txt
I get
cat: /compat/linux/proc/cpuinfo: Input/output error
truss shows the read system call returns ERR#5. It is the same with
other files from linprocfs.
cat /compat/linux/proc/[any_file] works fine
What am I missing?
Thanks in advance
_______________________________________________
freebsd...@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hacke...@freebsd.org"
> In 8.0-RELEASE-p1 if I try to execute this:
> cat /compat/linux/proc/cpuinfo > ~/cpuinfo.txt
> I get
> cat: /compat/linux/proc/cpuinfo: Input/output error
> truss shows the read system call returns ERR#5. It is the same with
> other files from linprocfs.
> cat /compat/linux/proc/[any_file] works fine
> What am I missing?
You are not missing anything, this is a bug. A while ago, cat(1) was
changed to use larger buffers when writing to regular files on machines
with sufficient RAM, usually a multiple of MAXPHYS. On the other hand,
pseudofs (the general framework for filesystems such as procfs,
linprocfs and linsysfs) in src/sys/fs/pseudofs/pseudofs_vnops.c
pfs_read() fails any read over MAXPHYS + 1 with EIO. This limit probably
has to do with the allocation of a buffer of that size using sbuf_new(9)
(and so, malloc(9)).
Some sort of limit seems appropriate, but MAXPHYS seems unrelated, and
if the request is too long it should perhaps just truncate it.
--
Jilles Tjoelker
Thanks a lot for the explanation.
With a quick test this patch seems to work:
%%%
Index: sys/fs/pseudofs/pseudofs_vnops.c
===================================================================
--- sys/fs/pseudofs/pseudofs_vnops.c (revision 202405)
+++ sys/fs/pseudofs/pseudofs_vnops.c (working copy)
@@ -637,10 +637,8 @@ pfs_read(struct vop_read_args *va)
error = EINVAL;
goto ret;
}
- if (buflen > MAXPHYS + 1) {
- error = EIO;
- goto ret;
- }
+ if (buflen > MAXPHYS + 1)
+ buflen = MAXPHYS + 1;
sb = sbuf_new(sb, NULL, buflen, 0);
if (sb == NULL) {
%%%
Maybe des@ can comment if this looks sane?
--
Jaakko
Looks good. It may confuse userland apps, but that's their own fault -
and frankly my dear, I don't give a damn :)
DES
--
Dag-Erling Smørgrav - d...@des.no