diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2006-07-09 10:05:27 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2006-07-09 10:05:27 +0000 |
commit | c9b005a9d2ed95bb1ab16fbc0c823c12a5c58b26 (patch) | |
tree | 38738aceaf0b1d08e1e41cd0059a1b8ddac79409 /cpukit/libfs/src/imfs | |
parent | Sync from freebsd6.1 (diff) | |
download | rtems-c9b005a9d2ed95bb1ab16fbc0c823c12a5c58b26.tar.bz2 |
applied patches for PR1117/1118/1119/1120
Diffstat (limited to 'cpukit/libfs/src/imfs')
-rw-r--r-- | cpukit/libfs/src/imfs/imfs.h | 10 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_initsupp.c | 38 |
2 files changed, 47 insertions, 1 deletions
diff --git a/cpukit/libfs/src/imfs/imfs.h b/cpukit/libfs/src/imfs/imfs.h index 67a154c0a2..a5e82a1579 100644 --- a/cpukit/libfs/src/imfs/imfs.h +++ b/cpukit/libfs/src/imfs/imfs.h @@ -80,7 +80,15 @@ typedef struct { * max_filesize with blocks of 512 is 1,082,195,456 */ -#define IMFS_MEMFILE_BYTES_PER_BLOCK 128 +#define IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK 128 + extern int imfs_rq_memfile_bytes_per_block; + /* + * FIXME: make and use derivates from this, + * a shift count and a mask + */ + extern int imfs_memfile_bytes_per_block; + +#define IMFS_MEMFILE_BYTES_PER_BLOCK imfs_memfile_bytes_per_block #define IMFS_MEMFILE_BLOCK_SLOTS \ (IMFS_MEMFILE_BYTES_PER_BLOCK / sizeof(void *)) diff --git a/cpukit/libfs/src/imfs/imfs_initsupp.c b/cpukit/libfs/src/imfs/imfs_initsupp.c index 6cfae62438..29b014d374 100644 --- a/cpukit/libfs/src/imfs/imfs_initsupp.c +++ b/cpukit/libfs/src/imfs/imfs_initsupp.c @@ -31,6 +31,37 @@ #endif /* + * IMFS_determine_bytes_per_block + */ +int imfs_memfile_bytes_per_block = 0; + +static int IMFS_determine_bytes_per_block( + int *dest_bytes_per_block, + int requested_bytes_per_block, + int default_bytes_per_block +) +{ + rtems_boolean is_valid = FALSE; + int bit_mask; + /* + * check, whether requested bytes per block is valid + */ + for (bit_mask = 16; + !is_valid && (bit_mask <= 512); + bit_mask <<= 1) { + if (bit_mask == requested_bytes_per_block) { + is_valid = TRUE; + } + } + *dest_bytes_per_block = ((is_valid) + ? requested_bytes_per_block + : default_bytes_per_block); + return 0; + +} + + +/* * IMFS_initialize */ @@ -45,6 +76,13 @@ int IMFS_initialize_support( IMFS_jnode_t *jnode; /* + * determine/check value for imfs_memfile_bytes_per_block + */ + IMFS_determine_bytes_per_block(&imfs_memfile_bytes_per_block, + imfs_rq_memfile_bytes_per_block, + IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK); + + /* * Create the root node * * NOTE: UNIX root is 755 and owned by root/root (0/0). |