NFSv4 client's BUG?
J. Bruce Fields
bfields at fieldses.org
Tue Jul 1 20:49:19 EDT 2008
On Wed, Jul 02, 2008 at 08:39:16AM +0800, Wei Yongjun wrote:
> Ellard, Daniel wrote:
> > You're never closing filedes[i], and eventually you're running out of
> > file descriptors.
> >
> > Add
> >
> > close(filedes[i]);
> >
> > After
> >
> > write(filedes[i], "...
> >
>
> This is not the problem. Because I used ulimit -n 5000 to let program
> can open 5000 files.
> The "fopen: Input/output error" may happend when I just open 40 files,
> it is random.
What's the server? Could you watch the traffic in wireshark and see
whether the server is returning an error on the failing open?
--b.
>
>
> > -----Original Message-----
> > From: Wei Yongjun [mailto:yjwei at cn.fujitsu.com]
> > Sent: Tuesday, July 01, 2008 6:08 AM
> > To: nfsv4 at linux-nfs.org
> > Subject: NFSv4 client's BUG?
> >
> > I have the following test program, but when it run, fopen may return
> > EIO, is this a bug of NFSv4 client?
> > NFSv4 client is 2.6.26-rc6.
> >
> > -------------------------tstfopen.c-------------------------------------
> >
> > #include <stdio.h>
> > #include <error.h>
> > #include <stdlib.h>
> > #include <string.h>
> >
> > char * fname;
> > #define TEMPLATE "HighInodeXXXXXX"
> > int main(int argc, char *argv[]) {
> > FILE *fp;
> > char filename[4096];
> > int filedes[4096];
> > int i;
> >
> > if (argc != 2) {
> > printf("Usage: %s filename\n", argv[0]);
> > exit(1);
> > }
> >
> > fname = argv[1];
> >
> > for (i = 0; i < 4096; i++) {
> > if (i % 100 == 0)
> > printf("i = %d\n", i);
> >
> > strcpy(filename, TEMPLATE);
> > if ((filedes[i] = mkstemp(filename)) == -1) {
> > perror("mkstemp");
> > exit(0);
> > }
> >
> > if ((fp = fopen(fname, "w+")) == NULL) {
> > perror("fopen");
> > exit(0);
> > }
> >
> > if (fprintf(fp, "this is a test %d\n", i) == 0) {
> > perror("fprintf");
> > exit(0);
> > }
> >
> > fclose(fp);
> > write(filedes[i], "abcdef!!!\n",23);
> > }
> >
> > return 0;
> > }
> >
> >
> > ---------------------------tstmain.sh------------------------------
> > umount /mnt
> > killall /root/tstfopen
> >
> > ulimit -n 5000
> >
> > mount -t nfs4 NFS4SERVER:/ /mnt
> >
> > cd /mnt
> >
> > /root/tstfopen debug_file &
> >
> > CNT=1
> > while [ $CNT -lt 1000 ];
> > do
> > cat debug_file
> > TSTR=`cat debug_file`
> > if [ "$TSTR" = "$LTSTR" ]; then
> > break
> > fi
> > LTSTR=$TSTR
> > sleep 1
> > CNT=$((CNT+1))
> > done
> >
> > rm -rf /mnt/*
> >
> > cd -
> >
> > umount /mnt
> > -----------------------------------end----------------------------
> >
> >
> > Usage:
> > #cd /root
> > #gcc tstfopen.c -o tstfopen
> > #sh tstmain.sh
> >
> > The output may be like this:
> > i = 0
> > this is a test 0
> > this is a test 63
> > ...
> > i = 1400
> > this is a test 1410
> > this is a test 1415
> > this is a test 1438
> > fopen: Input/output error
> >
>
> _______________________________________________
> NFSv4 mailing list
> NFSv4 at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/nfsv4
More information about the NFSv4
mailing list