Hello,

Running bonnie++ on a NFS mounted files system doesn't work. Bonnie exits
with a fatal error caused by an attempt to remove a non-empty directory.
Bonnie tries to remove all files in a directory by calling 'readdir' an
'unlink' in a loop. This works fine on a local filesystem (UFS) but not on a
NFS mounted filesystem (also UFS on the server).

I'm running FreeBSD 4.2-RELEASE on both the nfs-server and nfs-client. I
have used several NFS configs (v2/v3).

I have seen references to this problem in old archives (1997, FBSD 2.2.5/6),
but it seems the problem has never been fixed. Is this correct? I even read
the manual :-( but could not find a solution.

Below you will find a small program that reveals the problem, including a
fix., which I do not like, because it requires a change in user programs.

Regards,

Jakob Schripsema
[EMAIL PROTECTED]

-------------------------------


#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <dirent.h>


#define BASEDIR "/FS/testdir"           /* NFS mounted  */
#define NFILES  1024

main()
{
        create_files();
        delete_files();
}

create_files()
{
        int i,fd;
        char buf[2048];

        for(i = 0 ; i < NFILES ; i++) {
                snprintf(buf,2048,"%s/%04d",BASEDIR,i);
                if ((fd = open(buf,O_CREAT | O_TRUNC | O_WRONLY, 0644)) < 0)
{
                        perror(buf);
                        return(-1);
                }
                close(fd);
        }
}

delete_files()
{
        DIR *dirp;
        struct dirent *dp;
        char buf[2048];

        if ((dirp = opendir(BASEDIR)) == NULL) {
                perror("opendir");
                return (-1);
        }
        while ((dp = readdir(dirp)) != NULL) {
                if (dp->d_name[0] == '.')
                        continue;
                snprintf(buf,2048,"%s/%s",BASEDIR,dp->d_name);
                fprintf(stderr,"%s\n",buf);
                if (unlink(buf) < 0) {
                        perror(buf);
                        return (-1);
                }
                /* This fixes the problem */
                rewinddir(dirp);
                /* End fix */
        }
}

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to