svn commit: r234000 - head/sys/fs/tmpfs

Gleb Kurtsou gleb at FreeBSD.org
Sat Apr 7 15:30:47 UTC 2012


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. */


More information about the svn-src-all mailing list