TMPFS: Reported block size is now configurable

This commit is contained in:
Gregory Nutt 2015-10-09 16:57:48 -06:00
parent d80bea326f
commit e675ddb813
4 changed files with 29 additions and 13 deletions

2
arch

@ -1 +1 @@
Subproject commit 00acafcbb154a076f60413eb75249c5b68c6c316
Subproject commit 07f1151a8039a32ff09fe479869b268dd11ed514

View File

@ -14,6 +14,16 @@ config FS_TMPFS
if FS_TMPFS
config FS_TMPFS_BLOCKSIZE
int "Reported block size"
default 512
---help---
Various queries expect the file system to report resources in units
of blocks. There are, of course, no blocks with the TMPFS. This
options is available to control how sizes are reported. For very
small TMPFS systems, you might want to set this to something smaller
the the usual 512 bytes.
config FS_TMPFS_DIRECTORY_ALLOCGUARD
int "Directory object over-allocation"
default 64
@ -39,6 +49,9 @@ config FS_TMPFS_FILE_ALLOCGUARD
needed is always allocated. This permits the file to grow without
so many realloctions.
You will probably want to use smaller value than the default on tiny
TMFPS systems.
config FS_TMPFS_FILE_FREEGUARD
int "Directory under free"
default 1024

View File

@ -2009,17 +2009,21 @@ static int tmpfs_statfs(FAR struct inode *mountpt, FAR struct statfs *buf)
tmpfs_lock(fs);
/* Traverse the file system to accurmulate statistics */
/* Set up the memory use for the file system and root directory object */
tdo = fs->tfs_root;
inuse = SIZEOF_TMPFS_DIRECTORY(tdo->tdo_nentries);
avail = tdo->tdo_alloc - inuse;
inuse = sizeof(struct tmpfs_s) +
SIZEOF_TMPFS_DIRECTORY(tdo->tdo_nentries);
avail = sizeof(struct tmpfs_s) +
tdo->tdo_alloc - inuse;
tmpbuf.tsf_alloc = tdo->tdo_alloc;
tmpbuf.tsf_inuse = inuse;
tmpbuf.tsf_files = 0;
tmpbuf.tsf_ffree = avail / sizeof(struct tmpfs_dirent_s);
/* Traverse the file system to accurmulate statistics */
ret = tmpfs_foreach(fs->tfs_root, tmpfs_statfs_callout,
(FAR void *)&tmpbuf);
if (ret < 0)
@ -2029,12 +2033,14 @@ static int tmpfs_statfs(FAR struct inode *mountpt, FAR struct statfs *buf)
/* Return something for the file system description */
blkalloc = (tmpbuf.tsf_alloc + TMPFS_BLOCKSIZE - 1) / TMPFS_BLOCKSIZE;
blkused = (tmpbuf.tsf_inuse + TMPFS_BLOCKSIZE - 1) / TMPFS_BLOCKSIZE;
blkalloc = (tmpbuf.tsf_alloc + CONFIG_FS_TMPFS_BLOCKSIZE - 1) /
CONFIG_FS_TMPFS_BLOCKSIZE;
blkused = (tmpbuf.tsf_inuse + CONFIG_FS_TMPFS_BLOCKSIZE - 1) /
CONFIG_FS_TMPFS_BLOCKSIZE;
buf->f_type = TMPFS_MAGIC;
buf->f_namelen = NAME_MAX;
buf->f_bsize = TMPFS_BLOCKSIZE;
buf->f_bsize = CONFIG_FS_TMPFS_BLOCKSIZE;
buf->f_blocks = blkalloc;
buf->f_bfree = blkalloc - blkused;
buf->f_bavail = blkalloc - blkused;
@ -2487,8 +2493,9 @@ static int tmpfs_stat(FAR struct inode *mountpt, FAR const char *relpath,
/* Fake the rest of the information */
buf->st_size = objsize;
buf->st_blksize = TMPFS_BLOCKSIZE;
buf->st_blocks = (objsize + TMPFS_BLOCKSIZE - 1) / TMPFS_BLOCKSIZE;
buf->st_blksize = CONFIG_FS_TMPFS_BLOCKSIZE;
buf->st_blocks = (objsize + CONFIG_FS_TMPFS_BLOCKSIZE - 1) /
CONFIG_FS_TMPFS_BLOCKSIZE;
/* No... unlock the object and return success */

View File

@ -50,10 +50,6 @@
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* This is the block size reported by stat() */
#define TMPFS_BLOCKSIZE 512
/* Indicates that there is no holder of the re-entrant semaphore */
#define TMPFS_NO_HOLDER -1