version 1.4, 2011/05/24 01:09:47 |
version 1.4.28.1, 2014/08/10 06:55:54 |
Line 65 tmpfs_mntmem_destroy(struct tmpfs_mount |
|
Line 65 tmpfs_mntmem_destroy(struct tmpfs_mount |
|
mutex_destroy(&mp->tm_acc_lock); |
mutex_destroy(&mp->tm_acc_lock); |
} |
} |
|
|
|
int |
|
tmpfs_mntmem_set(struct tmpfs_mount *mp, uint64_t memlimit) |
|
{ |
|
int error; |
|
|
|
mutex_enter(&mp->tm_acc_lock); |
|
if (round_page(mp->tm_bytes_used) >= memlimit) |
|
error = EBUSY; |
|
else { |
|
error = 0; |
|
mp->tm_mem_limit = memlimit; |
|
} |
|
mutex_exit(&mp->tm_acc_lock); |
|
return error; |
|
} |
|
|
|
|
|
|
/* |
/* |
* tmpfs_mem_info: return the number of available memory pages. |
* tmpfs_mem_info: return the number of available memory pages. |
* |
* |
* => If 'total' is true, then return _total_ amount of pages. |
* => If 'total' is true, then return _total_ amount of pages. |
* => If false, then return the amount of _free_ memory pages. |
* => If false, then return the amount of _free_ memory pages. |
* |
* |
* Remember to remove TMPFS_PAGES_RESERVED from the returned value to avoid |
* Remember to remove uvmexp.freetarg from the returned value to avoid |
* excessive memory usage. |
* excessive memory usage. |
*/ |
*/ |
size_t |
size_t |
Line 97 tmpfs_mem_info(bool total) |
|
Line 115 tmpfs_mem_info(bool total) |
|
uint64_t |
uint64_t |
tmpfs_bytes_max(struct tmpfs_mount *mp) |
tmpfs_bytes_max(struct tmpfs_mount *mp) |
{ |
{ |
size_t freepages = tmpfs_mem_info(false); |
psize_t freepages = tmpfs_mem_info(false); |
uint64_t avail_mem; |
uint64_t avail_mem; |
|
|
if (freepages < TMPFS_PAGES_RESERVED) { |
if (freepages < uvmexp.freetarg) { |
freepages = 0; |
freepages = 0; |
} else { |
} else { |
freepages -= TMPFS_PAGES_RESERVED; |
freepages -= uvmexp.freetarg; |
} |
} |
avail_mem = round_page(mp->tm_bytes_used) + (freepages << PAGE_SHIFT); |
avail_mem = round_page(mp->tm_bytes_used) + (freepages << PAGE_SHIFT); |
return MIN(mp->tm_mem_limit, avail_mem); |
return MIN(mp->tm_mem_limit, avail_mem); |