problems with RFS filesystem and mkdir
Joel Sherrill
joel.sherrill at OARcorp.com
Wed Mar 20 14:26:24 UTC 2013
On 3/20/2013 9:25 AM, Matthew J Fletcher wrote:
>
> Joel,
>
> I did try that but I am using mingw and there is no functioning
> autoconf 2.69 package available, so I can't bootstrap a git head checkout.
>
Sigh... :(
Ok. I am sure Alan and Chris can try to reproduce this on the head.
--joel
>
> On 20 Mar 2013 14:22, "Joel Sherrill" <joel.sherrill at oarcorp.com
> <mailto:joel.sherrill at oarcorp.com>> wrote:
>
> On 3/20/2013 8:30 AM, Matthew J Fletcher wrote:
>> Hi,
>>
>> I wonder if this is target specific now, if i literately use the
>> sources you posted i get an error '-1' returned from the
>> rtems_mkdir().
>>
>> The only change i made was to malloc a smaller chuck, 32k. Of
>> course my malloc() is operating of the same SRAM chip, but it was
>> in a different address range.
>>
>> Not sure what to do now, i guess i have to work out whats up with
>> RFS on ARM thumb. Does anyone know what platforms RFS was
>> tested/developed on ?
>>
>>
> These are tested by the fstests set of tests. I don't believe
> these were in the 4.10
> tree. Now these are tested on every target that has the testsuite
> run. This would
> primarily be i386, SPARC, MIPS, PowerPC, Coldfire and ARM. That's
> where most
> of the daily developer activity is.
>
> The code was initially developed and tested primarily on Coldfire,
> SPARC, and i386.
>
> Chris can say more about it specifically.
>
> I would suggest that it would be good to see if this fails on 4.11
> if you haven't
> already.
>>
>> On 19 March 2013 21:36, Cudmore, Alan P. (GSFC-5820)
>> <alan.p.cudmore at nasa.gov <mailto:alan.p.cudmore at nasa.gov>> wrote:
>>
>> No problem. I have a pretty easy to use 4.10 setup right now.
>>
>> I did have to run the memset code for the address space. If
>> you pass a 0 in the cold_boot parameter, it fails.
>>
>> Alan
>>
>> On Mar 19, 2013, at 5:21 PM, Matthew J Fletcher
>> <amimjf at gmail.com <mailto:amimjf at gmail.com>> wrote:
>>
>>> Alan,
>>>
>>> Thanks very much for running this test, its given me quite a
>>> bit of confidence.
>>>
>>> Did you have to memset the address space to 0xff before you
>>> could register/format the device ?, I found I had to do that
>>> to not get an error code.
>>>
>>> I suppose the memset would rapidly throw up problems if I
>>> had addresses wrong. I can't think what the issue might be.
>>> I will try a mallocd area like your example though to see if
>>> I get a good result.
>>>
>>> On 19 Mar 2013 21:05, "Cudmore, Alan P. (GSFC-5820)"
>>> <alan.p.cudmore at nasa.gov <mailto:alan.p.cudmore at nasa.gov>>
>>> wrote:
>>>
>>> I took your code below and created an example that would
>>> build and run on my 4.10.2 setup. I ran this on the
>>> sparc-sis simulator, and it seems to work fine.
>>>
>>> Are you sure you have valid memory for the nvramdisk device?
>>>
>>> We rely on RFS on 4.10.2 and are giving a pretty good
>>> stress test right now.
>>>
>>> Alan
>>>
>>> ------------------------------
>>>
>>> #include <errno.h>
>>> #include <stdio.h>
>>> #include <stdlib.h>
>>> #include <sys/stat.h>
>>> #include <fcntl.h>
>>>
>>> #include <rtems.h>
>>> #include <rtems/bdbuf.h>
>>> #include <rtems/blkdev.h>
>>> #include <rtems/diskdevs.h>
>>> #include <rtems/error.h>
>>> #include <rtems/flashdisk.h>
>>> #include <rtems/fsmount.h>
>>> #include <rtems/rtems-rfs.h>
>>> #include <rtems/rtems-rfs-format.h>
>>> #include <rtems/nvdisk-sram.h>
>>>
>>> uint32_t rtems_nvdisk_configuration_size =1;
>>> constchar* sram_driver = "/dev/nvda"; //
>>> RTEMS_NVDISK_DEVICE_BASE_NAME, 1st device
>>> const char* sram_path = "/sram";
>>>
>>>
>>> /*
>>> * Let the IO system allocation the next available major
>>> number.
>>> */
>>> #define RTEMS_DRIVER_AUTO_MAJOR (0)
>>>
>>> /*
>>> * The SRAM Device setup
>>> */
>>> rtems_nvdisk_device_desc rtems_sram_device_descriptor[] =
>>> {
>>> {
>>> flags: 0,
>>> base: 0,
>>> size: 256* 1024, // 256K (Adjust when ROM.ld,
>>> _IMFS_DiskSize is changed)
>>> nv_ops: &rtems_nvdisk_sram_handlers
>>> }
>>> };
>>>
>>> const rtems_nvdisk_config rtems_nvdisk_configuration[] =
>>> {
>>> {
>>> block_size: 512,
>>> device_count: 1,
>>> devices: &rtems_sram_device_descriptor[0],
>>> flags: 0,
>>> info_level: 0
>>> }
>>> };
>>>
>>> /**
>>> * Create the SRAM Disk Driver entry.
>>> */
>>> rtems_driver_address_table rtems_sram_ops = {
>>> initialization_entry: rtems_nvdisk_initialize,
>>> open_entry: rtems_blkdev_generic_open,
>>> close_entry: rtems_blkdev_generic_close,
>>> read_entry: rtems_blkdev_generic_read,
>>> write_entry: rtems_blkdev_generic_write,
>>> control_entry: rtems_blkdev_generic_ioctl
>>> };
>>>
>>>
>>> void setup_sram_disk (int cold_boot)
>>> {
>>> rtems_device_major_number major;
>>> rtems_status_code sc;
>>>
>>> // settings
>>> rtems_sram_device_descriptor[0].base = (uint32_t *)
>>> malloc (256*1024);
>>>
>>> if (cold_boot)
>>> {
>>> memset(rtems_sram_device_descriptor[0].base, 0xff,
>>> rtems_sram_device_descriptor[0].size );
>>> }
>>>
>>> /*
>>> * Register the NV Disk driver.
>>> */
>>> sc = rtems_io_register_driver
>>> (RTEMS_DRIVER_AUTO_MAJOR, &rtems_sram_ops, &major);
>>> if ( sc < 0 )
>>> {
>>> printf("RTEMS Register IO driver failed\n");
>>> }
>>> else
>>> {
>>> printf("RTEMS register IO driver OK\n");
>>> }
>>> }
>>>
>>>
>>> /*
>>> *
>>> * RFS on SRAM
>>> *
>>> */
>>>
>>> void mount_rfs_on_sram(int cold_boot)
>>> {
>>> rtems_rfs_format_config config;
>>> rtems_status_code rc;
>>>
>>> setup_sram_disk (cold_boot);
>>>
>>> // zero is a good set of defaults
>>> memset (&config, 0, sizeof (rtems_rfs_format_config));
>>>
>>> if (rtems_rfs_format (sram_driver, &config) < 0)
>>> {
>>> printf("error: format of %s failed: %s\n",
>>> sram_driver, strerror (errno));
>>> }
>>> else
>>> {
>>> printf("RTEMS RFS format OK\n");
>>> }
>>>
>>> if (mount_and_make_target_path(
>>> sram_driver,
>>> sram_path,
>>> RTEMS_FILESYSTEM_TYPE_RFS,
>>> RTEMS_FILESYSTEM_READ_WRITE,
>>> NULL
>>> ) != 0)
>>> {
>>> printf("error: mount of %s to %s failed: %s\n",
>>> sram_driver, sram_path, strerror (errno));
>>> }
>>> else
>>> {
>>> printf("mount and make target path OK\n");
>>> }
>>>
>>> rc = rtems_mkdir("sram/DB", S_IRWXU | S_IRGRP |
>>> S_IXGRP | S_IROTH | S_IXOTH);
>>> if ( rc < 0 )
>>> {
>>> printf("rtems_mkdir failed\n");
>>> }
>>> else
>>> {
>>> printf("mkdir sdram/DB OK\n");
>>> }
>>> }
>>>
>>> rtems_task Init(
>>> rtems_task_argument ignored
>>> )
>>> {
>>> printf( "\n\n*** Starting NVRAM Disk Test ***\n");
>>> mount_rfs_on_sram(1);
>>> printf( "*** END OF TEST ***\n");
>>> exit( 0 );
>>> }
>>>
>>> #define CONFIGURE_EXTRA_TASK_STACKS
>>> (CONFIGURE_MAXIMUM_TASKS * RTEMS_MINIMUM_STACK_SIZE)
>>>
>>> #define CONFIGURE_MAXIMUM_DRIVERS 6
>>> /* NOTICE: the clock driver is explicitly disabled */
>>> #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
>>> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
>>> #define CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
>>> #define CONFIGURE_MAXIMUM_TASKS 40 // TX MAX_THREAD
>>> #define CONFIGURE_MAXIMUM_TIMERS 40 // TX MAX_TIMER
>>> #define CONFIGURE_MAXIMUM_SEMAPHORES 40 // TX MAX_MUTEX
>>> #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 40 // TX
>>> MAX_MSG_QUEUE
>>> #define CONFIGURE_MAXIMUM_PARTITIONS 5
>>> #define CONFIGURE_MAXIMUM_REGIONS 5
>>> #define CONFIGURE_MAXIMUM_PORTS 0
>>> #define CONFIGURE_MAXIMUM_PERIODS 0
>>> #define CONFIGURE_MAXIMUM_BARRIERS 0
>>>
>>> #define CONFIGURE_MICROSECONDS_PER_TICK 10000 /* 10
>>> milliseconds */
>>> #define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50
>>> milliseconds */
>>>
>>> #define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
>>> #define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS 2
>>> #define CONFIGURE_BDBUF_MAX_WRITE_BLOCKS 8
>>> #define CONFIGURE_SWAPOUT_TASK_PRIORITY 15
>>> #define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
>>> #define CONFIGURE_FILESYSTEM_RFS
>>> #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10
>>>
>>> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
>>> #define CONFIGURE_INIT
>>> #include <rtems/confdefs.h>
>>>
>>> -------------------------------
>>>
>>>
>>>
>>> On Mar 18, 2013, at 2:35 PM, Matthew J Fletcher
>>> <amimjf at gmail.com <mailto:amimjf at gmail.com>> wrote:
>>>
>>>> Hi,
>>>>
>>>>
>>>> Alas the mkdir() is the first filesystem operation i am
>>>> doing. I am not sure if i can send attachments to the
>>>> list so i've cut and pasted the relivant functions
>>>> below. I guess the following would run on any BSP, its
>>>> just a 256k block of sram. If there is a BSP with
>>>> enough memory the base pointer for the filesystem could
>>>> just be a big malloc().
>>>>
>>>> ------------------- snip -------------------------
>>>>
>>>>
>>>> #define CONFIGURE_IDLE_TASK_BODY rtems_idle
>>>> #define CONFIGURE_EXTRA_TASK_STACKS
>>>> (CONFIGURE_MAXIMUM_TASKS * RTEMS_MINIMUM_STACK_SIZE)
>>>>
>>>> #define CONFIGURE_MAXIMUM_DRIVERS 6
>>>>
>>>> /* NOTICE: the clock driver is explicitly disabled */
>>>> #define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
>>>> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
>>>>
>>>> #define CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
>>>> #define CONFIGURE_MAXIMUM_TASKS 40 // TX
>>>> MAX_THREAD
>>>> #define CONFIGURE_MAXIMUM_TIMERS 40 //
>>>> TX MAX_TIMER
>>>> #define CONFIGURE_MAXIMUM_SEMAPHORES 40 //
>>>> TX MAX_MUTEX
>>>> #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 40 //
>>>> TX MAX_MSG_QUEUE
>>>> #define CONFIGURE_MAXIMUM_PARTITIONS 5
>>>> #define CONFIGURE_MAXIMUM_REGIONS 5
>>>> #define CONFIGURE_MAXIMUM_PORTS 0
>>>> #define CONFIGURE_MAXIMUM_PERIODS 0
>>>> #define CONFIGURE_MAXIMUM_BARRIERS 0
>>>>
>>>> #define CONFIGURE_MICROSECONDS_PER_TICK 10000 /* 10
>>>> milliseconds */
>>>> #define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50
>>>> milliseconds */
>>>>
>>>> #define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
>>>> #define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS 2
>>>> #define CONFIGURE_BDBUF_MAX_WRITE_BLOCKS 8
>>>> #define CONFIGURE_SWAPOUT_TASK_PRIORITY 15
>>>> #define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
>>>> #define CONFIGURE_FILESYSTEM_RFS
>>>> #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10
>>>>
>>>> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
>>>> #define CONFIGURE_INIT
>>>> #include <rtems/confdefs.h>
>>>>
>>>>
>>>> uint32_t rtems_flashdisk_configuration_size =1;
>>>> const char* flash_driver = "/dev/fdda"; //
>>>> RTEMS_FLASHDISK_DEVICE_BASE_NAME, 1st device
>>>> const char* flash_path = "/flash";
>>>>
>>>> uint32_t rtems_nvdisk_configuration_size =1;
>>>> const char* sram_driver = "/dev/nvda"; //
>>>> RTEMS_NVDISK_DEVICE_BASE_NAME, 1st device
>>>> const char* sram_path = "/sram";
>>>>
>>>>
>>>> /**
>>>> * Let the IO system allocation the next available
>>>> major number.
>>>> */
>>>> #define RTEMS_DRIVER_AUTO_MAJOR (0)
>>>>
>>>> #define FLASHDISK_SEGMENT_COUNT 8 /* 128*/ //
>>>> Spansion S29GL128S, 128Mbit part
>>>> #define FLASHDISK_SEGMENT_SIZE (128 * 1024) //
>>>> Spansion S29GL128S, 128k sized sectors
>>>> #define FLASHDISK_BLOCK_SIZE 512
>>>> #define FLASHDISK_BLOCKS_PER_SEGMENT
>>>> (FLASHDISK_SEGMENT_SIZE / FLASHDISK_BLOCK_SIZE)
>>>> #define FLASHDISK_SIZE (FLASHDISK_SEGMENT_COUNT *
>>>> FLASHDISK_SEGMENT_SIZE)
>>>>
>>>>
>>>> /**
>>>> * The SRAM Device setup
>>>> */
>>>> rtems_nvdisk_device_desc rtems_sram_device_descriptor[] =
>>>> {
>>>> {
>>>> flags: 0,
>>>> base: 0,
>>>> size: 256 * 1024, // 256K (Adjust when
>>>> ROM.ld, _IMFS_DiskSize is changed)
>>>> nv_ops: &rtems_nvdisk_sram_handlers
>>>> }
>>>> };
>>>>
>>>> const rtems_nvdisk_config rtems_nvdisk_configuration[] =
>>>> {
>>>> {
>>>> block_size: 512,
>>>> device_count: 1,
>>>> devices: &rtems_sram_device_descriptor[0],
>>>> flags: 0,
>>>> info_level: 0
>>>> }
>>>> };
>>>>
>>>>
>>>>
>>>>
>>>> /**
>>>> * Create the SRAM Disk Driver entry.
>>>> */
>>>> rtems_driver_address_table rtems_sram_ops = {
>>>> initialization_entry: rtems_nvdisk_initialize,
>>>> open_entry: rtems_blkdev_generic_open,
>>>> close_entry: rtems_blkdev_generic_close,
>>>> read_entry: rtems_blkdev_generic_read,
>>>> write_entry: rtems_blkdev_generic_write,
>>>> control_entry: rtems_blkdev_generic_ioctl
>>>> };
>>>>
>>>>
>>>>
>>>> int setup_sram_disk (int cold_boot)
>>>> {
>>>> rtems_device_major_number major;
>>>> rtems_status_code sc;
>>>>
>>>> // settings
>>>> rtems_sram_device_descriptor[0].base = (unsigned
>>>> long)eTalus_IMFS_start;
>>>>
>>>> if (cold_boot)
>>>> {
>>>> memset(rtems_sram_device_descriptor[0].base, 0xff,
>>>> rtems_sram_device_descriptor[0].size );
>>>> }
>>>>
>>>> /*
>>>> * Register the NV Disk driver.
>>>> */
>>>> sc = rtems_io_register_driver
>>>> (RTEMS_DRIVER_AUTO_MAJOR, &rtems_sram_ops, &major);
>>>> }
>>>>
>>>>
>>>> /*
>>>> *
>>>> * RFS on SRAM
>>>> *
>>>> */
>>>>
>>>> void mount_rfs_on_sram(int cold_boot)
>>>> {
>>>> rtems_rfs_format_config config;
>>>>
>>>> setup_sram_disk (cold_boot);
>>>>
>>>> // zero is a good set of defaults
>>>> memset (&config, 0, sizeof (rtems_rfs_format_config));
>>>>
>>>> if (rtems_rfs_format (sram_driver, &config) < 0)
>>>> {
>>>> sprintf(inital_print_buffer,"error: format of %s
>>>> failed: %s\n", sram_driver, strerror (errno));
>>>> UART0_SendStr(inital_print_buffer);
>>>> }
>>>>
>>>> if (mount_and_make_target_path(
>>>> sram_driver,
>>>> sram_path,
>>>> RTEMS_FILESYSTEM_TYPE_RFS,
>>>> RTEMS_FILESYSTEM_READ_WRITE,
>>>> NULL
>>>> ) != 0)
>>>> {
>>>> sprintf(inital_print_buffer,"error: mount of %s to %s
>>>> failed: %s\n", sram_driver, sram_path, strerror (errno));
>>>> UART0_SendStr(inital_print_buffer);
>>>> }
>>>>
>>>> rc = rtems_mkdir("sram/DB", S_IRWXU | S_IRGRP |
>>>> S_IXGRP | S_IROTH | S_IXOTH);
>>>> }
>>>>
>>>>
>>>>
>>>> ------------------- end ------------------------
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 18 March 2013 17:42, Joel Sherrill
>>>> <joel.sherrill at oarcorp.com
>>>> <mailto:joel.sherrill at oarcorp.com>> wrote:
>>>>
>>>> Is this reproducible with something you can share?
>>>>
>>>> Looking at the source, I think this case is that you
>>>> filled the filesystem and there were no free blocks.
>>>> But I am looking at the head and not that familiar
>>>> with this filesystem.
>>>>
>>>> --joel
>>>>
>>>> On 3/18/2013 12:20 PM, Matthew J Fletcher wrote:
>>>>
>>>> Hi,
>>>>
>>>> I have an RFS filesystem using the nvram
>>>> device, its formatted ok and
>>>> mount_and_make_target_path() also worked ok.
>>>> But attempting to mkdir() causes a really
>>>> lowlevel issue.
>>>>
>>>> The callstack;
>>>>
>>>> rtems_rfs_block_map_find() at
>>>> rtems-rfs-block.c:246 0x81198bd8
>>>> rtems_rfs_block_map_next_block() at
>>>> rtems-rfs-block.c:353 0x81198d1e
>>>> rtems_rfs_dir_lookup_ino() at
>>>> rtems-rfs-dir.c:204 0x8119951c
>>>> rtems_rfs_rtems_eval_for_make() at
>>>> rtems-rfs-rtems.c:440 0x8118e142
>>>> IMFS_evaluate_for_make() at imfs_eval.c:435
>>>> 0x81190718
>>>> mknod() at mknod.c:64 0x81183d5c
>>>> mkdir() at mkdir.c:29 0x81183cf0
>>>> build() at rtems_mkdir.c:101 0x811843a0
>>>> rtems_mkdir() at rtems_mkdir.c:136 0x811843a0
>>>>
>>>>
>>>> the rtems_rfs_block_pos_block_past_end macro is
>>>> failing and causing the return of ENXIO.
>>>>
>>>> The two arguments to the macro are;
>>>>
>>>> bpos->bno = 1
>>>> bpos->boff = 0
>>>> bpos->block = 0
>>>>
>>>> map->size->count = 1
>>>> map->size->offset = 0
>>>>
>>>> Which seems to me the cause of ENXIO being
>>>> returned, but i dont know how my BSP could
>>>> affect this.
>>>>
>>>> Do people use RFS in production systems ? i am
>>>> using the 4.10.2 sources.
>>>>
>>>>
>>>> regards
>>>> ---
>>>> Matthew J Fletcher
>>>>
>>>>
>>>>
>>>> --
>>>> Joel Sherrill, Ph.D. Director of
>>>> Research & Development
>>>> joel.sherrill at OARcorp.com
>>>> <mailto:joel.sherrill at OARcorp.com> On-Line
>>>> Applications Research
>>>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>>>> Support Available (256) 722-9985
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> regards
>>>> ---
>>>> Matthew J Fletcher
>>>>
>>>> _______________________________________________
>>>> rtems-users mailing list
>>>> rtems-users at rtems.org <mailto:rtems-users at rtems.org>
>>>> http://www.rtems.org/mailman/listinfo/rtems-users
>>>
>>
>>
>>
>>
>> --
>>
>> regards
>> ---
>> Matthew J Fletcher
>>
>
>
> --
> Joel Sherrill, Ph.D. Director of Research & Development
> joel.sherrill at OARcorp.com <mailto:joel.sherrill at OARcorp.com> On-Line Applications Research
> Ask me about RTEMS: a free RTOS Huntsville AL 35805
> Support Available (256) 722-9985
>
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20130320/5d8d410f/attachment-0001.html>
More information about the users
mailing list