lkml.org 
[lkml]   [2001]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] - filesystem corruption on soft RAID5 in 2.4.0+
    I've attached Holger's testcase (ext2, SMP, raid5)
    boot with "mem=64M" and run the attached script.
    The script creates and deletes 9 directories with 10.000 in each dir.
    Neil, could you run it? I don't have an raid 5 array - SMP+ext2 without
    raid5 is ok.

    Holger, what's your ext2 block size, and do you run with a degraded
    array?

    --
    Manfred#include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <dirent.h>
    #include <errno.h>

    static void create_files(int, int, char *),
    delete_files(char *);


    /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ fsd $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
    int
    main(int argc, char *argv[])
    {
    int no_of_files,
    file_size;
    char dirname[1024];

    if (argc == 4)
    {
    no_of_files = atoi(argv[1]);
    file_size = atoi(argv[2]);
    (void)strcpy(dirname, argv[3]);
    }
    else
    {
    (void)fprintf(stderr,
    "Usage: %s <number of files> <file size> <directory>\n",
    argv[0]);
    exit(1);
    }
    create_files(no_of_files, file_size, dirname);
    delete_files(dirname);
    exit(0);
    }


    /*+++++++++++++++++++++++++++ create_files() ++++++++++++++++++++++++++++*/
    static void
    create_files(int no_of_files, int file_size, char *dirname)
    {
    int i, fd;
    char *ptr;

    ptr = dirname + strlen(dirname);
    *ptr++ = '/';
    for (i = 0; i < no_of_files; i++)
    {
    (void)sprintf(ptr, "this_is_dummy_file_%d", i);
    if ((fd = open(dirname, O_CREAT|O_RDWR, S_IRUSR|S_IWUSR)) == -1)
    {
    (void)fprintf(stderr, "Failed to open() %s : %s\n",
    dirname, strerror(errno));
    exit(1);
    }
    if (lseek(fd, file_size - 1, SEEK_SET) == -1)
    {
    (void)fprintf(stderr, "Failed to lseek() %s : %s\n",
    dirname, strerror(errno));
    exit(1);
    }
    if (write(fd, "", 1) != 1)
    {
    (void)fprintf(stderr, "Failed to write() to %s : %s\n",
    dirname, strerror(errno));
    exit(1);
    }
    if (close(fd) == -1)
    {
    (void)fprintf(stderr, "Failed to close() %s : %s\n",
    dirname, strerror(errno));
    }
    }
    ptr[-1] = 0;
    return;
    }


    /*++++++++++++++++++++++++++++ delete_files +++++++++++++++++++++++++++++*/
    static void
    delete_files(char *dirname)
    {
    char *ptr;
    struct dirent *dirp;
    DIR *dp;

    ptr = dirname + strlen(dirname);
    if ((dp = opendir(dirname)) == NULL)
    {
    (void)fprintf(stderr, "Failed to opendir() %s : %s\n",
    dirname, strerror(errno));
    exit(1);
    }
    *ptr++ = '/';
    while ((dirp = readdir(dp)) != NULL)
    {
    if (dirp->d_name[0] != '.')
    {
    (void)strcpy(ptr, dirp->d_name);
    if (unlink(dirname) == -1)
    {
    (void)fprintf(stderr, "Failed to open() %s : %s\n",
    dirname, strerror(errno));
    exit(1);
    }
    }
    }
    ptr[-1] = 0;
    if (closedir(dp) == -1)
    {
    (void)fprintf(stderr, "Failed to closedir() %s : %s\n",
    dirname, strerror(errno));
    }
    return;
    }
    #!/bin/sh

    NO_OF_PROCESS=9
    NUMBER_OF_FILES=10000
    FILE_SIZE=2048

    counter=0
    while [ $counter -lt $NO_OF_PROCESS ]
    do
    if [ ! -d $counter ]
    then
    mkdir $counter
    fi
    ./fsd $NUMBER_OF_FILES $FILE_SIZE $counter &
    counter=`expr "$counter" + 1`
    done
    \
     
     \ /
      Last update: 2005-03-22 13:13    [W:0.027 / U:1.304 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site