summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs
diff options
context:
space:
mode:
authorThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2006-07-09 10:05:27 +0000
committerThomas Doerfler <Thomas.Doerfler@embedded-brains.de>2006-07-09 10:05:27 +0000
commitc9b005a9d2ed95bb1ab16fbc0c823c12a5c58b26 (patch)
tree38738aceaf0b1d08e1e41cd0059a1b8ddac79409 /cpukit/libfs
parentSync from freebsd6.1 (diff)
downloadrtems-c9b005a9d2ed95bb1ab16fbc0c823c12a5c58b26.tar.bz2
applied patches for PR1117/1118/1119/1120
Diffstat (limited to 'cpukit/libfs')
-rw-r--r--cpukit/libfs/src/imfs/imfs.h10
-rw-r--r--cpukit/libfs/src/imfs/imfs_initsupp.c38
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).