Author: gleb
Date: Sat Apr  7 15:30:46 2012
New Revision: 234000
URL: http://svn.freebsd.org/changeset/base/234000

Log:
  tmpfs supports only INT_MAX nodes due to limitations of unit number
  allocator.
  
  Replace UINT32_MAX checks with INT_MAX. Keeping more than 2^31 nodes in
  memory is not likely to become possible in foreseeable feature and would
  require new unit number allocator.
  
  Discussed with: delphij
  MFC after:    2 weeks

Modified:
  head/sys/fs/tmpfs/tmpfs_vfsops.c

Modified: head/sys/fs/tmpfs/tmpfs_vfsops.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_vfsops.c    Sat Apr  7 15:27:34 2012        
(r233999)
+++ head/sys/fs/tmpfs/tmpfs_vfsops.c    Sat Apr  7 15:30:46 2012        
(r234000)
@@ -130,6 +130,8 @@ tmpfs_node_fini(void *mem, int size)
 static int
 tmpfs_mount(struct mount *mp)
 {
+       const size_t nodes_per_page = howmany(PAGE_SIZE,
+           sizeof(struct tmpfs_dirent) + sizeof(struct tmpfs_node));
        struct tmpfs_mount *tmp;
        struct tmpfs_node *root;
        int error;
@@ -195,11 +197,13 @@ tmpfs_mount(struct mount *mp)
        MPASS(pages > 0);
 
        if (nodes_max <= 3) {
-               if (pages > UINT32_MAX - 3)
-                       nodes_max = UINT32_MAX;
+               if (pages < INT_MAX / nodes_per_page)
+                       nodes_max = pages * nodes_per_page;
                else
-                       nodes_max = pages + 3;
+                       nodes_max = INT_MAX;
        }
+       if (nodes_max > INT_MAX)
+               nodes_max = INT_MAX;
        MPASS(nodes_max >= 3);
 
        /* Allocate the tmpfs mount structure and fill it. */
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to