Index: cpukit/libfs/src/imfs/fifoimfs_init.c
===================================================================
--- cpukit/libfs/src/imfs/fifoimfs_init.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/fifoimfs_init.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -48,10 +48,10 @@
 };
 
-static const IMFS_node_control *const
-  IMFS_fifo_node_controls [IMFS_TYPE_COUNT] = {
-  [IMFS_DIRECTORY] = &IMFS_node_control_directory,
-  [IMFS_DEVICE] = &IMFS_node_control_device,
-  [IMFS_MEMORY_FILE] = &IMFS_node_control_memfile,
-  [IMFS_FIFO] = &IMFS_node_control_fifo
+static const IMFS_mknod_control *const
+  IMFS_fifo_mknod_controls[IMFS_TYPE_COUNT] = {
+  [IMFS_DIRECTORY] = &IMFS_mknod_control_directory,
+  [IMFS_DEVICE] = &IMFS_mknod_control_device,
+  [IMFS_MEMORY_FILE] = &IMFS_mknod_control_memfile,
+  [IMFS_FIFO] = &IMFS_mknod_control_fifo
 };
 
@@ -64,5 +64,5 @@
     mt_entry,
     &fifoIMFS_ops,
-    IMFS_fifo_node_controls
+    IMFS_fifo_mknod_controls
   );
 }
Index: cpukit/libfs/src/imfs/imfs.h
===================================================================
--- cpukit/libfs/src/imfs/imfs.h	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs.h	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -215,9 +215,13 @@
 typedef struct {
   const rtems_filesystem_file_handlers_r *handlers;
-  size_t node_size;
   IMFS_node_control_initialize node_initialize;
   IMFS_node_control_remove node_remove;
   IMFS_node_control_destroy node_destroy;
 } IMFS_node_control;
+
+typedef struct {
+  IMFS_node_control node_control;
+  size_t node_size;
+} IMFS_mknod_control;
 
 /** @} */
@@ -372,5 +376,5 @@
 
 typedef struct {
-  const IMFS_node_control *node_controls [IMFS_TYPE_COUNT];
+  const IMFS_mknod_control *mknod_controls[ IMFS_TYPE_COUNT ];
 } IMFS_fs_info_t;
 
@@ -379,10 +383,10 @@
  */
 
-extern const IMFS_node_control IMFS_node_control_directory;
-extern const IMFS_node_control IMFS_node_control_device;
-extern const IMFS_node_control IMFS_node_control_memfile;
+extern const IMFS_mknod_control IMFS_mknod_control_directory;
+extern const IMFS_mknod_control IMFS_mknod_control_device;
+extern const IMFS_mknod_control IMFS_mknod_control_memfile;
 extern const IMFS_node_control IMFS_node_control_linfile;
-extern const IMFS_node_control IMFS_node_control_fifo;
-extern const IMFS_node_control IMFS_node_control_enosys;
+extern const IMFS_mknod_control IMFS_mknod_control_fifo;
+extern const IMFS_mknod_control IMFS_mknod_control_enosys;
 
 extern const rtems_filesystem_operations_table miniIMFS_ops;
@@ -417,5 +421,5 @@
   rtems_filesystem_mount_table_entry_t *mt_entry,
   const rtems_filesystem_operations_table *op_table,
-  const IMFS_node_control *const node_controls [IMFS_TYPE_COUNT]
+  const IMFS_mknod_control *const mknod_controls[ IMFS_TYPE_COUNT ]
 );
 /**
@@ -560,6 +564,6 @@
  */
 extern IMFS_jnode_t *IMFS_allocate_node(
-  IMFS_fs_info_t *fs_info,
   const IMFS_node_control *node_control,
+  size_t node_size,
   const char *name,
   size_t namelen,
@@ -577,4 +581,5 @@
   const rtems_filesystem_location_info_t *parentloc,
   const IMFS_node_control *node_control,
+  size_t node_size,
   const char *name,
   size_t namelen,
@@ -615,5 +620,4 @@
   { \
     ( handlers ), \
-    sizeof( IMFS_generic_t ), \
     ( init ), \
     IMFS_node_remove_default, \
Index: cpukit/libfs/src/imfs/imfs_creat.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_creat.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_creat.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -24,6 +24,6 @@
 
 IMFS_jnode_t *IMFS_allocate_node(
-  IMFS_fs_info_t *fs_info,
   const IMFS_node_control *node_control,
+  size_t node_size,
   const char *name,
   size_t namelen,
@@ -47,5 +47,5 @@
    *  Allocate an IMFS jnode
    */
-  node = calloc( 1, node_control->node_size );
+  node = calloc( 1, node_size );
   if ( !node ) {
     errno = ENOMEM;
@@ -89,4 +89,5 @@
   const rtems_filesystem_location_info_t *parentloc,
   const IMFS_node_control *node_control,
+  size_t node_size,
   const char *name,
   size_t namelen,
@@ -95,8 +96,7 @@
 )
 {
-  IMFS_fs_info_t *fs_info = parentloc->mt_entry->fs_info;
   IMFS_jnode_t *node = IMFS_allocate_node(
-    fs_info,
     node_control,
+    node_size,
     name,
     namelen,
Index: cpukit/libfs/src/imfs/imfs_fifo.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_fifo.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_fifo.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -131,9 +131,11 @@
 };
 
-const IMFS_node_control IMFS_node_control_fifo = {
-  .handlers = &IMFS_fifo_handlers,
-  .node_size = sizeof(IMFS_fifo_t),
-  .node_initialize = IMFS_node_initialize_default,
-  .node_remove = IMFS_node_remove_default,
-  .node_destroy = IMFS_node_destroy_default
+const IMFS_mknod_control IMFS_mknod_control_fifo = {
+  {
+    .handlers = &IMFS_fifo_handlers,
+    .node_initialize = IMFS_node_initialize_default,
+    .node_remove = IMFS_node_remove_default,
+    .node_destroy = IMFS_node_destroy_default
+  },
+  .node_size = sizeof( IMFS_fifo_t )
 };
Index: cpukit/libfs/src/imfs/imfs_handlers_device.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_handlers_device.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_handlers_device.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -64,9 +64,11 @@
 }
 
-const IMFS_node_control IMFS_node_control_device = {
-  .handlers = &IMFS_device_handlers,
-  .node_size = sizeof(IMFS_device_t),
-  .node_initialize = IMFS_node_initialize_device,
-  .node_remove = IMFS_node_remove_default,
-  .node_destroy = IMFS_node_destroy_default
+const IMFS_mknod_control IMFS_mknod_control_device = {
+  {
+    .handlers = &IMFS_device_handlers,
+    .node_initialize = IMFS_node_initialize_device,
+    .node_remove = IMFS_node_remove_default,
+    .node_destroy = IMFS_node_destroy_default
+  },
+  .node_size = sizeof( IMFS_device_t )
 };
Index: cpukit/libfs/src/imfs/imfs_handlers_directory.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_handlers_directory.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_handlers_directory.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -103,9 +103,11 @@
 }
 
-const IMFS_node_control IMFS_node_control_directory = {
-  .handlers = &IMFS_directory_handlers,
-  .node_size = sizeof(IMFS_directory_t),
-  .node_initialize = IMFS_node_initialize_directory,
-  .node_remove = IMFS_node_remove_directory,
-  .node_destroy = IMFS_node_destroy_default
+const IMFS_mknod_control IMFS_mknod_control_directory = {
+  {
+    .handlers = &IMFS_directory_handlers,
+    .node_initialize = IMFS_node_initialize_directory,
+    .node_remove = IMFS_node_remove_directory,
+    .node_destroy = IMFS_node_destroy_default
+  },
+  .node_size = sizeof( IMFS_directory_t )
 };
Index: cpukit/libfs/src/imfs/imfs_handlers_memfile.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_handlers_memfile.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_handlers_memfile.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -70,15 +70,16 @@
 };
 
-const IMFS_node_control IMFS_node_control_memfile = {
-  .handlers = &IMFS_memfile_handlers,
-  .node_size = sizeof(IMFS_file_t),
-  .node_initialize = IMFS_node_initialize_default,
-  .node_remove = IMFS_node_remove_default,
-  .node_destroy = IMFS_memfile_remove
+const IMFS_mknod_control IMFS_mknod_control_memfile = {
+  {
+    .handlers = &IMFS_memfile_handlers,
+    .node_initialize = IMFS_node_initialize_default,
+    .node_remove = IMFS_node_remove_default,
+    .node_destroy = IMFS_memfile_remove
+  },
+  .node_size = sizeof( IMFS_file_t )
 };
 
 const IMFS_node_control IMFS_node_control_linfile = {
   .handlers = &IMFS_linfile_handlers,
-  .node_size = sizeof(IMFS_file_t),
   .node_initialize = IMFS_node_initialize_default,
   .node_remove = IMFS_node_remove_default,
Index: cpukit/libfs/src/imfs/imfs_init.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_init.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_init.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -44,10 +44,10 @@
 };
 
-static const IMFS_node_control *const
-  IMFS_node_controls [IMFS_TYPE_COUNT] = {
-  [IMFS_DIRECTORY] = &IMFS_node_control_directory,
-  [IMFS_DEVICE] = &IMFS_node_control_device,
-  [IMFS_MEMORY_FILE] = &IMFS_node_control_memfile,
-  [IMFS_FIFO] = &IMFS_node_control_enosys
+static const IMFS_mknod_control *const
+  IMFS_mknod_controls[ IMFS_TYPE_COUNT ] = {
+  [IMFS_DIRECTORY] = &IMFS_mknod_control_directory,
+  [IMFS_DEVICE] = &IMFS_mknod_control_device,
+  [IMFS_MEMORY_FILE] = &IMFS_mknod_control_memfile,
+  [IMFS_FIFO] = &IMFS_mknod_control_enosys
 };
 
@@ -60,5 +60,5 @@
     mt_entry,
     &IMFS_ops,
-    IMFS_node_controls
+    IMFS_mknod_controls
   );
 }
Index: cpukit/libfs/src/imfs/imfs_initsupp.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_initsupp.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_initsupp.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -59,5 +59,5 @@
   rtems_filesystem_mount_table_entry_t *mt_entry,
   const rtems_filesystem_operations_table *op_table,
-  const IMFS_node_control *const node_controls [IMFS_TYPE_COUNT]
+  const IMFS_mknod_control *const mknod_controls[ IMFS_TYPE_COUNT ]
 )
 {
@@ -69,12 +69,12 @@
 
     memcpy(
-      fs_info->node_controls,
-      node_controls,
-      sizeof( fs_info->node_controls )
+      fs_info->mknod_controls,
+      mknod_controls,
+      sizeof( fs_info->mknod_controls )
     );
 
     root_node = IMFS_allocate_node(
-      fs_info,
-      fs_info->node_controls [IMFS_DIRECTORY],
+      &fs_info->mknod_controls[ IMFS_DIRECTORY ]->node_control,
+      fs_info->mknod_controls[ IMFS_DIRECTORY ]->node_size,
       "",
       0,
@@ -166,9 +166,11 @@
 }
 
-const IMFS_node_control IMFS_node_control_enosys = {
-  .handlers = &rtems_filesystem_handlers_default,
-  .node_size = sizeof(IMFS_jnode_t),
-  .node_initialize = IMFS_node_initialize_enosys,
-  .node_remove = IMFS_node_remove_default,
-  .node_destroy = IMFS_node_destroy_default
+const IMFS_mknod_control IMFS_mknod_control_enosys = {
+  {
+    .handlers = &rtems_filesystem_handlers_default,
+    .node_initialize = IMFS_node_initialize_enosys,
+    .node_remove = IMFS_node_remove_default,
+    .node_destroy = IMFS_node_destroy_default
+  },
+  .node_size = sizeof( IMFS_jnode_t )
 };
Index: cpukit/libfs/src/imfs/imfs_link.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_link.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_link.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -47,4 +47,5 @@
     parentloc,
     &IMFS_node_control_hard_link,
+    sizeof( IMFS_link_t ),
     name,
     namelen,
@@ -134,5 +135,4 @@
 static const IMFS_node_control IMFS_node_control_hard_link = {
   .handlers = &IMFS_link_handlers,
-  .node_size = sizeof(IMFS_link_t),
   .node_initialize = IMFS_node_initialize_hard_link,
   .node_remove = IMFS_node_remove_hard_link,
Index: cpukit/libfs/src/imfs/imfs_load_tar.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_load_tar.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_load_tar.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -127,4 +127,5 @@
             currentloc,
             &IMFS_node_control_linfile,
+            sizeof( IMFS_file_t ),
             rtems_filesystem_eval_path_get_token( &ctx ),
             rtems_filesystem_eval_path_get_tokenlen( &ctx ),
Index: cpukit/libfs/src/imfs/imfs_make_generic_node.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_make_generic_node.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_make_generic_node.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -86,4 +86,5 @@
         currentloc,
         node_control,
+        sizeof( IMFS_generic_t ),
         rtems_filesystem_eval_path_get_token( &ctx ),
         rtems_filesystem_eval_path_get_tokenlen( &ctx ),
Index: cpukit/libfs/src/imfs/imfs_mknod.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_mknod.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_mknod.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -48,9 +48,12 @@
   int rv = 0;
   const IMFS_fs_info_t *fs_info = parentloc->mt_entry->fs_info;
+  const IMFS_mknod_control *mknod_control =
+    fs_info->mknod_controls[ get_type( mode ) ];
   IMFS_jnode_t *new_node;
 
   new_node = IMFS_create_node(
     parentloc,
-    fs_info->node_controls[ get_type( mode ) ],
+    &mknod_control->node_control,
+    mknod_control->node_size,
     name,
     namelen,
Index: cpukit/libfs/src/imfs/imfs_symlink.c
===================================================================
--- cpukit/libfs/src/imfs/imfs_symlink.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/imfs_symlink.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -50,4 +50,5 @@
     parentloc,
     &IMFS_node_control_sym_link,
+    sizeof( IMFS_sym_link_t ),
     name,
     namelen,
@@ -134,5 +135,4 @@
 static const IMFS_node_control IMFS_node_control_sym_link = {
   .handlers = &IMFS_link_handlers,
-  .node_size = sizeof(IMFS_sym_link_t),
   .node_initialize = IMFS_node_initialize_sym_link,
   .node_remove = IMFS_node_remove_default,
Index: cpukit/libfs/src/imfs/memfile.c
===================================================================
--- cpukit/libfs/src/imfs/memfile.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/memfile.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -89,5 +89,5 @@
     const unsigned char *buffer = file->Linearfile.direct;
 
-    file->Node.control            = &IMFS_node_control_memfile;
+    file->Node.control            = &IMFS_mknod_control_memfile.node_control;
     file->File.size               = 0;
     file->Memfile.indirect        = 0;
Index: cpukit/libfs/src/imfs/miniimfs_init.c
===================================================================
--- cpukit/libfs/src/imfs/miniimfs_init.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ cpukit/libfs/src/imfs/miniimfs_init.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -44,10 +44,10 @@
 };
 
-static const IMFS_node_control *const
-  IMFS_mini_node_controls [IMFS_TYPE_COUNT] = {
-  [IMFS_DIRECTORY] = &IMFS_node_control_directory,
-  [IMFS_DEVICE] = &IMFS_node_control_device,
-  [IMFS_MEMORY_FILE] = &IMFS_node_control_memfile,
-  [IMFS_FIFO] = &IMFS_node_control_enosys
+static const IMFS_mknod_control *const
+  IMFS_mini_mknod_controls[ IMFS_TYPE_COUNT ] = {
+  [IMFS_DIRECTORY] = &IMFS_mknod_control_directory,
+  [IMFS_DEVICE] = &IMFS_mknod_control_device,
+  [IMFS_MEMORY_FILE] = &IMFS_mknod_control_memfile,
+  [IMFS_FIFO] = &IMFS_mknod_control_enosys
 };
 
@@ -60,5 +60,5 @@
     mt_entry,
     &miniIMFS_ops,
-    IMFS_mini_node_controls
+    IMFS_mini_mknod_controls
   );
 }
Index: testsuites/fstests/fsimfsgeneric01/init.c
===================================================================
--- testsuites/fstests/fsimfsgeneric01/init.c	(revision 194eb0074b78039194aaada4bcc211a3cca9e7ee)
+++ testsuites/fstests/fsimfsgeneric01/init.c	(revision 24ec25d2aee6dde7b572f27694e9a62e34a6603f)
@@ -299,5 +299,4 @@
 static const IMFS_node_control node_control = {
   .handlers = &node_handlers,
-  .node_size = sizeof(IMFS_generic_t),
   .node_initialize = node_initialize,
   .node_remove = node_remove,
@@ -393,5 +392,4 @@
 static const IMFS_node_control node_initialization_error_control = {
   .handlers = &node_handlers,
-  .node_size = sizeof(IMFS_generic_t),
   .node_initialize = node_initialize_error,
   .node_remove = node_remove_inhibited,
