diff options
author | Gleb Kurtsou <gleb@FreeBSD.org> | 2012-04-07 15:30:46 +0000 |
---|---|---|
committer | Gleb Kurtsou <gleb@FreeBSD.org> | 2012-04-07 15:30:46 +0000 |
commit | 9295c628143892401988e5be20521d0901106837 (patch) | |
tree | 17a7aa7f41002a199bcdb8e032d7e6849cb90bc8 /sys/fs | |
parent | 0ff93c48daaad1a8dbb72a0d01006aaae075f328 (diff) | |
download | src-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.c | 10 |
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. */ |