NFSv4: truncate returns I/O error

From: Miklos Szeredi
Date: Tue Mar 06 2012 - 05:10:23 EST


The attached test program reliably fails on an NFSv4 mount.

# mount -tnfs -onfsvers=4 127.0.0.1:/ /mnt/nfs
# ./truncate-test /mnt/nfs/tmp/xyz
truncate: Input/output error

Thanks,
Miklos

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
int res;
char *name = argv[1];

unlink(name);
close(open(name, O_WRONLY | O_CREAT, 0644));
close(open(name, O_RDONLY));

res = truncate(name, 1);
if (res == -1) {
perror("truncate");
return 1;
}
return 0;
}