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.605 / U:0.480 seconds]
©2003-2014 Jasper Spaans. Advertise on this site