Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Oct 2014 21:24:22 -0400 (EDT)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        Garrett Wollman <wollman@csail.mit.edu>
Cc:        freebsd-fs@freebsd.org
Subject:   Re: 9.3 NFS client bug?
Message-ID:  <1991198781.60122149.1412731462373.JavaMail.root@uoguelph.ca>
In-Reply-To: <21556.28888.523838.856998@khavrinen.csail.mit.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
Garrett Wollman wrote:
> <<On Tue, 7 Oct 2014 18:16:24 -0400 (EDT), Rick Macklem
> <rmacklem@uoguelph.ca> said:
> 
> > ps: I would like to hear what happens when you test against a UFS
> > volume.
> 
> We don't have any UFS volumes, and this 96-drive file server is not
> likely ever to have any.
> 
> FWIW, I now have a packet capture of the complete test, taken from
> the
> server side, if anyone wants to look at it in detail.
> 
> The inner loop of the "sequential delete" benchmark looks like this
> (slightly simplified):
> 
>     while(1)
>     {
>       file_ent = readdir(d);
>       if(file_ent == NULL)
>         break;
>       if(file_ent->d_name[0] != '.')
>       {
>         if(unlink(file_ent->d_name))
>         {
>           fprintf(stderr, "Can't delete file %s\n",
>           file_ent->d_name);
>           return -1;
>         }
>         count++;
>       }
>     }
>     closedir(d);
> 
> This makes me wonder if there isn't some issue with the NFS
> VOP_READDIR losing its place in the presence of interleaved deletes.
> fts(3) won't see this as it reads the whole directory at once (for
> sorting, if requested) before invoking the callback on each entry.
> 
Yep. As noted in the other reply, an unlink() inside a loop on
readdir() has never worked for NFS on FreeBSD, as far as I know.
It's related to the handling of directory offset cookies, but I
can't remember all the details.

rick

> -GAWollman
> 
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1991198781.60122149.1412731462373.JavaMail.root>