From: Miklos S. <mi...@sz...> - 2008-05-30 18:14:10
|
> Please let me know if that is not the right place for this type of > questions. > > I am seeing this message in the log file of our virtual file system and was > trying to track its root cause. Inspecting fuse-2.7.2/lib/fuse_kern_chan.c > shows that this message is printed from fuse_kern_chan_receive() after > verifying that errno after read() return -1 is not in the set (ENOENT, > ENODEV, EINTR, EAGAIN). However, per the read() manual pages, read() would > not set errno to 512, which is strange. And 512 is not a valid errno value. > My user-space read() implementation appears below and fi->fh was previously > initialized by opening a temporary file created on the fly on the local > filesystem (ext3) when calling my open() callback. > > static int read(const char *path, char *buf, size_t size, off_t > offset, struct fuse_file_info *fi) > { > int res; > (void) path; > res = pread(fi->fh, buf, size, offset); > if (res == -1) > res = -errno; > return res; > } > Would anyone have a suggestion, please? This is strange indeed. 512 means ERESTARTSYS, which is a kernel internal errno value. But it should never be seen in userspace. > cat /proc/version > Linux version 2.6.18-53.1.13.el5xen (moc...@bu...) (gcc > version 4.1.2 20070626 (Red Hat 4.1.2-14)) #1 SMP Tue Feb 12 13:33:07 EST > 2008 It doesn't look like a fuse problem (fuse is correctly rejecting the errno as invalid). Perhaps it is xen related? Miklos |