I think I have found a bug in the low level read() code of the 2.6.9-34 kernel from RedHat, or maybe a new feature.
To summarize, reading of a file in the same process which opened it with a F_WRLCK will fail in 2.6.9-34 but not in the 2.4.21-27 kernel.
It fails only when the disk is a cached nfs mounted disk. It works as before on local disks, and disks mounted with "noac".
int main (int argc, char *argv )
char buff = "TestBuffer";
struct flock fl;
f = open(argv,O_RDWR|O_CREAT|O_EXCL,0666);
printf("read = %d\n",read(f,buff,10));
The program outputs "read = 0" on 2.6.9-34 when it cannot read from a file it opened with a F_WRLCK lock, the error condition. It will output "read = 10" always on 2.4.21-27 and when using a local disk like /tmp, or when using a disk mounted with a "noac". "read = 10" means things are working properly.
How do a report this bug? Or how do I determine if it is a bug or a new "feature"?