From: Timothy Manning Date: Mon, 1 Nov 2010 01:22:17 +0000 (+1300) Subject: yaffs bugs all fixed X-Git-Tag: linux-mainline-patchset-4~125 X-Git-Url: https://yaffs.net/gitweb/?p=yaffs2.git;a=commitdiff_plain;h=46e033c6f38fd704e51b0846c39cfa21c187759a yaffs bugs all fixed Signed-off-by: Timothy Manning --- diff --git a/direct/timothy_tests/EACCES_bug/Makefile b/direct/timothy_tests/EACCES_bug/Makefile deleted file mode 100644 index fa63986..0000000 --- a/direct/timothy_tests/EACCES_bug/Makefile +++ /dev/null @@ -1,103 +0,0 @@ -# Makefile for YAFFS direct stress tests -# -# -# YAFFS: Yet another Flash File System. A NAND-flash specific file system. -# -# Copyright (C) 2003-2010 Aleph One Ltd. -# -# -# Created by Charles Manning -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 as -# published by the Free Software Foundation. -# -# NB Warning this Makefile does not include header dependencies. -# -# $Id: Makefile,v 1.7 2010-02-25 22:34:47 charles Exp $ - -#EXTRA_COMPILE_FLAGS = -DYAFFS_IGNORE_TAGS_ECC - -CFLAGS = -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -CFLAGS += -DCONFIG_YAFFS_PROVIDE_DEFS -DCONFIG_YAFFSFS_PROVIDE_VALUES -CFLAGS += -Wall -g $(EXTRA_COMPILE_FLAGS) -Wstrict-aliasing -#CFLAGS += -fno-strict-aliasing -CFLAGS += -O0 -CFLAGS += -Wextra -Wpointer-arith -#CFLAGS += -DCONFIG_YAFFS_VALGRIND_TEST - -#CFLAGS+= -Wshadow -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wmissing-declarations -#CFLAGS+= -Wmissing-prototypes -Wredundant-decls -Wnested-externs -Winline - - -COMMONTESTOBJS = yaffscfg2k.o yaffs_ecc.o yaffs_fileem.o yaffs_fileem2k.o yaffsfs.o yaffs_guts.o \ - yaffs_packedtags1.o yaffs_ramdisk.o yaffs_ramem2k.o \ - yaffs_tagscompat.o yaffs_packedtags2.o yaffs_tagsvalidity.o yaffs_nand.o \ - yaffs_checkptrw.o yaffs_qsort.o\ - yaffs_nameval.o \ - yaffs_norif1.o ynorsim.o \ - yaffs_allocator.o \ - yaffs_bitmap.o \ - yaffs_yaffs1.o \ - yaffs_yaffs2.o \ - yaffs_verify.o - -# yaffs_checkptrwtest.o\ - -YAFFSTESTOBJS = $(COMMONTESTOBJS) yaffs_tester.o message_buffer.o error_handler.o - - -ALLOBJS = $(sort $(YAFFSTESTOBJS)) - -YAFFSSYMLINKS = devextras.h yaffs_ecc.c yaffs_ecc.h yaffs_guts.c yaffs_guts.h yaffsinterface.h yportenv.h yaffs_tagscompat.c yaffs_tagscompat.h \ - yaffs_packedtags1.c yaffs_packedtags1.h yaffs_packedtags2.c yaffs_packedtags2.h \ - yaffs_nand.c yaffs_nand.h yaffs_getblockinfo.h yaffs_list.h \ - yaffs_tagsvalidity.c yaffs_tagsvalidity.h yaffs_checkptrw.h yaffs_checkptrw.c \ - yaffs_nameval.c yaffs_nameval.h \ - yaffs_qsort.h yaffs_trace.h \ - yaffs_allocator.c yaffs_allocator.h \ - yaffs_yaffs1.c yaffs_yaffs1.h \ - yaffs_yaffs2.c yaffs_yaffs2.h \ - yaffs_bitmap.c yaffs_bitmap.h \ - yaffs_verify.c yaffs_verify.h - -YAFFSDIRECTSYMLINKS = yaffsfs.c yaffs_flashif.h yaffs_flashif2.h\ - yaffsfs.h yaffs_malloc.h ydirectenv.h \ - yaffs_flashif.c yaffscfg.h yaffs_qsort.c\ - yaffs_nandif.c yaffs_nandif.h yaffs_nandemul2k.h - - -DIRECTEXTRASYMLINKS = yaffscfg2k.c yaffs_fileem2k.c yaffs_fileem2k.h\ - yaffs_fileem.c yaffs_norif1.c yaffs_norif1.h \ - yaffs_ramdisk.c yaffs_ramdisk.h yaffs_ramem2k.c \ - ynorsim.h ynorsim.c - -SYMLINKS = $(YAFFSSYMLINKS) $(YAFFSDIRECTSYMLINKS) $(DIRECTEXTRASYMLINKS) -#all: directtest2k boottest - -all: yaffs_tester - -$(ALLOBJS): %.o: %.c - gcc -c $(CFLAGS) -o $@ $< - - -$(YAFFSSYMLINKS): - ln -s ../../../$@ $@ - -$(YAFFSDIRECTSYMLINKS): - ln -s ../../$@ $@ - -$(DIRECTEXTRASYMLINKS): - ln -s ../../basic-test/$@ $@ - - -yaffs_tester: $(SYMLINKS) $(YAFFSTESTOBJS) - gcc $(CFLLAG) -o $@ $(YAFFSTESTOBJS) - - - - - - -clean: - rm -f yaffs_tester $(ALLOBJS) core $(SYMLINKS) log.txt diff --git a/direct/timothy_tests/EACCES_bug/README.txt b/direct/timothy_tests/EACCES_bug/README.txt deleted file mode 100644 index f61011f..0000000 --- a/direct/timothy_tests/EACCES_bug/README.txt +++ /dev/null @@ -1,3 +0,0 @@ - -This program tries to open a new file in yaffs. The yaffs_open() function returns a -1 handle and gives an error of EACCES. -This bug only seems to happen when the emfile has a lot of files in it. diff --git a/direct/timothy_tests/EACCES_bug/emfile-2k-0 b/direct/timothy_tests/EACCES_bug/emfile-2k-0 deleted file mode 100644 index 94d3658..0000000 Binary files a/direct/timothy_tests/EACCES_bug/emfile-2k-0 and /dev/null differ diff --git a/direct/timothy_tests/EACCES_bug/error_handler.c b/direct/timothy_tests/EACCES_bug/error_handler.c deleted file mode 100644 index 214d201..0000000 --- a/direct/timothy_tests/EACCES_bug/error_handler.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * YAFFS: Yet another FFS. A NAND-flash specific file system. - * - * Copyright (C) 2002-2010 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering - * - * Created by Timothy Manning - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -/* - * error_handler.c contains code for checking yaffs function calls for errors. - */ -#include "error_handler.h" - - -typedef struct error_codes_template { - int code; - char * text; -}error_entry; - -const error_entry error_list[] = { - { ENOMEM , "ENOMEM" }, - { EBUSY , "EBUSY"}, - { ENODEV , "ENODEV"}, - { EINVAL , "EINVAL"}, - { EBADF , "EBADF"}, - { EACCES , "EACCES"}, - { EXDEV , "EXDEV" }, - { ENOENT , "ENOENT"}, - { ENOSPC , "ENOSPC"}, - { ERANGE , "ERANGE"}, - { ENODATA, "ENODATA"}, - { ENOTEMPTY, "ENOTEMPTY"}, - { ENAMETOOLONG,"ENAMETOOLONG"}, - { ENOMEM , "ENOMEM"}, - { EEXIST , "EEXIST"}, - { ENOTDIR , "ENOTDIR"}, - { EISDIR , "EISDIR"}, - { 0, NULL } -}; - -const char * error_to_str(int err) -{ - error_entry *e = error_list; - if (err < 0) - err = -err; - while(e->code && e->text){ - if(err == e->code) - return e->text; - e++; - } - return "Unknown error code"; -} - -void yaffs_check_for_errors(int output, buffer *message_buffer,char error_message[],char success_message[]){ - char dummy[10]; - unsigned int x=0; - int yaffs_error=-1; - char error_found=0; - if (output==-1) - { - add_to_buffer(message_buffer, "\nerror##########",MESSAGE_LEVEL_ERROR,PRINT); - add_to_buffer(message_buffer, error_message,MESSAGE_LEVEL_ERROR,PRINT); - add_to_buffer(message_buffer, "error_code: ",MESSAGE_LEVEL_ERROR,PRINT); - yaffs_error=yaffs_get_error(); - if (MESSAGE_LEVEL_ERROR<=DEBUG_LEVEL) printf("%d\n",yaffs_error); /*cannot yet add int types to buffer. this is a quick fix*/ - add_to_buffer(message_buffer, error_to_str(yaffs_error),MESSAGE_LEVEL_ERROR,NPRINT); - append_to_buffer(message_buffer, "\n\n",MESSAGE_LEVEL_ERROR,PRINT); - - scanf("%c",dummy); /*this line causes a segmentation fault. Need a better way of waiting for a key press*/ - //print_buffer(message_buffer,PRINT_ALL); - - } - else{ - add_to_buffer(message_buffer, success_message,MESSAGE_LEVEL_BASIC_TASKS,PRINT); - } -} - - diff --git a/direct/timothy_tests/EACCES_bug/error_handler.h b/direct/timothy_tests/EACCES_bug/error_handler.h deleted file mode 100644 index 4dc17eb..0000000 --- a/direct/timothy_tests/EACCES_bug/error_handler.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * YAFFS: Yet another Flash File System . A NAND-flash specific file system. - * - * Copyright (C) 2002-2010 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering - * - * Created by Timothy Manning - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 as - * published by the Free Software Foundation. - * - * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. - */ - -#ifndef __error_handler_h__ -#define __error_handler_h__ -#include -#include "message_buffer.h" -#include "yaffsfs.h" -#define DEBUG_LEVEL 5 /*set the debug level. this is used to display the relevent debug messages*/ -void yaffs_check_for_errors(int output, buffer *message_buffer, char error_message[], char success_message[]); -#endif diff --git a/direct/timothy_tests/EACCES_bug/message_buffer.c b/direct/timothy_tests/EACCES_bug/message_buffer.c deleted file mode 100644 index 1ff21e0..0000000 --- a/direct/timothy_tests/EACCES_bug/message_buffer.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * YAFFS: Yet another FFS. A NAND-flash specific file system. - * - * Copyright (C) 2002-2010 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering - * - * Created by Timothy Manning - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -/* - * message_buffer.c contains code for a message buffer . - */ - -#include "message_buffer.h" - -void append_to_buffer(buffer *p_Buffer, char *message,char message_level,char print){ - /*wrapper function for add_to_buffer_root_function*/ - add_to_buffer_root_function(p_Buffer,message, message_level,APPEND_MESSAGE,print); -} - -void add_to_buffer(buffer *p_Buffer, char *message,char message_level,char print){ - /*wrapper function for add_to_buffer_root_function*/ - add_to_buffer_root_function(p_Buffer,message, message_level,DO_NOT_APPEND_MESSAGE,print); -} - -void add_int_to_buffer(buffer *p_Buffer, int num,char message_level,char print){ - char message[20]; - sprintf(message, "%d",num); - add_to_buffer_root_function(p_Buffer,message, message_level,DO_NOT_APPEND_MESSAGE,print); -} - -void append_int_to_buffer(buffer *p_Buffer, int num,char message_level,char print){ - char message[20]; - sprintf(message, "%d",num); - add_to_buffer_root_function(p_Buffer,message, message_level,APPEND_MESSAGE,print); -} - - -void add_to_buffer_root_function(buffer *p_Buffer, char *message,char message_level,char append,char print){ - FILE *log_handle; - - if (append==APPEND_MESSAGE){ /* append current message*/ - strncat(p_Buffer->message[p_Buffer->head],message,BUFFER_MESSAGE_LENGTH); - } - else { - - /*move the head up one. the head always points at the last written data*/ - p_Buffer->head++; - - /*printf("p_Buffer->tail=%d\n",p_Buffer->tail);*/ - /*printf("p_Buffer->head=%d\n",p_Buffer->head);*/ - if (p_Buffer->head >=BUFFER_SIZE-1) { - /*printf("buffer overflow\n");*/ - p_Buffer->head -= (BUFFER_SIZE-1); /*wrap the head around the buffer*/ - /*printf("new p_Buffer->head=%d\n",p_Buffer->head);*/ - } - /*if the buffer is full then delete last entry by moving the tail*/ - if (p_Buffer->head==p_Buffer->tail){ - /*printf("moving buffer tail from %d to ",p_Buffer->tail);*/ - p_Buffer->tail++; - if (p_Buffer->tail >=BUFFER_SIZE) p_Buffer->tail -= BUFFER_SIZE;/*wrap the tail around the buffer*/ - /*printf("%d\n",p_Buffer->tail);*/ - - } - - p_Buffer->message_level[p_Buffer->head]=message_level; /*copy the message level*/ - strncpy(p_Buffer->message[p_Buffer->head],message,BUFFER_MESSAGE_LENGTH); /*copy the message*/ - /*printf("copied %s into p_Buffer->message[p_Buffer->head]: %s\n",message,p_Buffer->message[p_Buffer->head]); - printf("extra %s\n",p_Buffer->message[p_Buffer->head]);*/ - } - if ((p_Buffer->message_level[p_Buffer->head]<=DEBUG_LEVEL)&& (print==PRINT)){ - /*printf("printing buffer 1\n"); - // the print buffer function is not working this is just a quick fix - print_buffer(p_Buffer,1); //if the debug level is higher enough then print the new message - */ - printf("%s\n",p_Buffer->message[p_Buffer->head]); - log_handle=fopen(LOG_FILE,"a"); - if (log_handle!=NULL){ - fputs(p_Buffer->message[p_Buffer->head],log_handle); - fputs("\n",log_handle); - fclose(log_handle); - } - } -} - - - -void print_buffer(buffer *p_Buffer, int number_of_messages_to_print){ - int x=0; - int i=0; - printf("print buffer\n"); - printf("buffer head:%d\n",p_Buffer->head); - printf("buffer tail:%d\n",p_Buffer->tail); - - if (number_of_messages_to_print==PRINT_ALL) number_of_messages_to_print=BUFFER_SIZE; -// printf("number_of_messages_to_print=%d\n",number_of_messages_to_print); - for (i=0,x=0; (x>=p_Buffer->tail) && (imessage[p_Buffer->head]); - printf("printed buffer\n"); - } - -} - - - diff --git a/direct/timothy_tests/EACCES_bug/message_buffer.h b/direct/timothy_tests/EACCES_bug/message_buffer.h deleted file mode 100644 index 2f7984f..0000000 --- a/direct/timothy_tests/EACCES_bug/message_buffer.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * YAFFS: Yet another Flash File System . A NAND-flash specific file system. - * - * Copyright (C) 2002-2010 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering - * - * Created by Timothy Manning - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 as - * published by the Free Software Foundation. - * - * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. - */ - -#ifndef __message_buffer__ -#define __message_buffer__ - -#include -#include -#define PRINT 1 -#define NPRINT 0 -#define APPEND_MESSAGE 1 -#define DO_NOT_APPEND_MESSAGE 0 -#define PRINT_ALL -1 /*this is used to print all of the messages in a buffer*/ -#define BUFFER_MESSAGE_LENGTH 60 /*number of char in message*/ -#define BUFFER_SIZE 50 /*number of messages in buffer*/ -#define MESSAGE_LEVEL_ERROR 0 -#define MESSAGE_LEVEL_BASIC_TASKS 1 - -#define LOG_FILE "log.txt" -typedef struct buffer_template{ - char message[BUFFER_SIZE][BUFFER_MESSAGE_LENGTH]; - int head; - int tail; - char message_level[BUFFER_SIZE]; -}buffer; -#include "error_handler.h" /*include this for the debug level*/ - - -void print_buffer(buffer *p_Buffer,int number_of_messages_to_print); /*print messages in the buffer*/ -/*wrapper functions for add_to_buffer_root_function*/ -void add_to_buffer(buffer *p_Buffer, char *message,char message_level,char print); -void append_to_buffer(buffer *p_Buffer, char *message,char message_level,char print); -void add_int_to_buffer(buffer *p_Buffer, int num,char message_level,char print); -void append_int_to_buffer(buffer *p_Buffer, int num,char message_level,char print); - -void add_to_buffer_root_function(buffer *p_Buffer, char *message,char message_level,char append,char print); -#endif diff --git a/direct/timothy_tests/EACCES_bug/yaffs_tester.c b/direct/timothy_tests/EACCES_bug/yaffs_tester.c deleted file mode 100644 index 81bacf0..0000000 --- a/direct/timothy_tests/EACCES_bug/yaffs_tester.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * YAFFS: Yet another FFS. A NAND-flash specific file system. - * - * Copyright (C) 2002-2010 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering - * - * Created by Timothy Manning - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -/* - * yaffs_tester.c designed to stress test yaffs2 direct. - */ - - -#include "yaffs_tester.h" - - - -int random_seed; -int simulate_power_failure = 0; - - -buffer message_buffer; /*create message_buffer */ - - -struct handle_regster{ - int handle[MAX_NUMBER_OF_OPENED_HANDLES]; - char path[MAX_NUMBER_OF_OPENED_HANDLES][100]; - int number_of_open_handles; -}; - - -int main(int argc, char *argv[]){ - char yaffs_test_dir[] ="/yaffs2/test_dir"; /*the path to the directory where all of the testing will take place*/ - char yaffs_mount_dir[]="/yaffs2/"; /*the path to the mount point which yaffs will mount*/ - - init(yaffs_test_dir,yaffs_mount_dir,argc,argv); - test(yaffs_test_dir); - yaffs_unmount(yaffs_mount_dir); - return 0; -} - - - -void init(char *yaffs_test_dir,char *yaffs_mount_dir,int argc, char *argv[]){ - char output=0; - int x=0; - int seed=-1; - FILE *log_handle; - /*these variables are already set to zero, but it is better not to take chances*/ - message_buffer.head=0; - message_buffer.tail=0; - - - log_handle=fopen(LOG_FILE,"w"); - if (log_handle!=NULL){ - fputs("log file for yaffs tester\n",log_handle); - fclose(log_handle); - } - add_to_buffer(&message_buffer,"welcome to the yaffs tester",MESSAGE_LEVEL_BASIC_TASKS,PRINT);/* print boot up message*/ - yaffs_start_up(); - yaffs_mount(yaffs_mount_dir); - for (x=0;x2 ; x++) - { - //printf("x=%d\n",x); - /* keep generating a charecter until the charecter is legal*/ - while((letter=='\0' )||(letter=='/')||(letter=='\\')){ - letter=(rand() % 126-32)+32; /*generate a number between 32 and 126 and uses it as a charecter (letter) */ - } - ptr[x]=letter; - //printf("charecter generated is %c\n",ptr[x]); - } - ptr[x+1]='\0'; /*adds NULL charecter to turn it into a string*/ - -} - -void stat_file(char *path){ - int output=0; - struct yaffs_stat stat; - if (yaffs_access(path,0)==0){ - add_to_buffer(&message_buffer,"file exists, trying to stat: ",MESSAGE_LEVEL_BASIC_TASKS,NPRINT); - add_to_buffer(&message_buffer,path,MESSAGE_LEVEL_BASIC_TASKS,PRINT); - output=yaffs_lstat(path,&stat); - yaffs_check_for_errors(output, &message_buffer,"failed to stat file","statted file"); - //stat.st_ino,(int)stat.st_size,stat.st_mode - add_to_buffer(&message_buffer,"yaffs inode: ",MESSAGE_LEVEL_BASIC_TASKS,NPRINT); - append_int_to_buffer(&message_buffer,stat.st_ino,MESSAGE_LEVEL_BASIC_TASKS,NPRINT); - append_to_buffer(&message_buffer," file size: ",MESSAGE_LEVEL_BASIC_TASKS,NPRINT); - append_int_to_buffer(&message_buffer,(int)stat.st_size,MESSAGE_LEVEL_BASIC_TASKS,NPRINT); - append_to_buffer(&message_buffer," file mode: ",MESSAGE_LEVEL_BASIC_TASKS,NPRINT); - append_int_to_buffer(&message_buffer,stat.st_mode,MESSAGE_LEVEL_BASIC_TASKS,PRINT); - } - else{ - add_to_buffer(&message_buffer,path,MESSAGE_LEVEL_BASIC_TASKS,NPRINT); - append_to_buffer(&message_buffer," does not exist,could not stat",MESSAGE_LEVEL_BASIC_TASKS,PRINT); - } -} - diff --git a/direct/timothy_tests/EACCES_bug/yaffs_tester.h b/direct/timothy_tests/EACCES_bug/yaffs_tester.h deleted file mode 100644 index d9ddf73..0000000 --- a/direct/timothy_tests/EACCES_bug/yaffs_tester.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * YAFFS: Yet another Flash File System . A NAND-flash specific file system. - * - * Copyright (C) 2002-2010 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering - * - * Created by Timothy Manning - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 as - * published by the Free Software Foundation. - * - * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. - */ - -#ifndef __YAFFS_TESTER_H__ - #define __YAFFS_TESTER_H__ - -#include -#include -#include -#include - -#include "yaffsfs.h" /* it is in "yaffs2/direct/" link it in the Makefile */ -#include "message_buffer.h" -#include "error_handler.h" - -#define MAX_NUMBER_OF_OPENED_HANDLES 50 -#define MAX_FILE_NAME_SIZE 51 - -void init(char *yaffs_test_dir,char *yaffs_mount_dir,int argc, char *argv[]); /*sets up yaffs and mounts yaffs */ -void test(char *yaffs_test_dir); /*contains the test code*/ -void generate_random_string(char *ptr); /*generates a random string of letters to be used for a name*/ -void join_paths(char *path1,char *path2,char *newpath ); -void copy_array(char *from,char *to, unsigned int from_offset,unsigned int to_offset); -#endif