aboutsummaryrefslogtreecommitdiff
path: root/sys/fs
diff options
context:
space:
mode:
authorGleb Kurtsou <gleb@FreeBSD.org>2012-04-07 15:30:46 +0000
committerGleb Kurtsou <gleb@FreeBSD.org>2012-04-07 15:30:46 +0000
commit9295c628143892401988e5be20521d0901106837 (patch)
tree17a7aa7f41002a199bcdb8e032d7e6849cb90bc8 /sys/fs
parent0ff93c48daaad1a8dbb72a0d01006aaae075f328 (diff)
downloadsrc-9295c628143892401988e5be20521d0901106837.tar.gz
src-9295c628143892401988e5be20521d0901106837.zip
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
Notes
Notes: svn path=/head/; revision=234000
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/tmpfs/tmpfs_vfsops.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/fs/tmpfs/tmpfs_vfsops.c b/sys/fs/tmpfs/tmpfs_vfsops.c
index 6bb1a440f5c9..96d7321e6b49 100644
--- a/sys/fs/tmpfs/tmpfs_vfsops.c
+++ b/sys/fs/tmpfs/tmpfs_vfsops.c
@@ -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. */