diff --git a/arch b/arch index 00acafcbb15..07f1151a803 160000 --- a/arch +++ b/arch @@ -1 +1 @@ -Subproject commit 00acafcbb154a076f60413eb75249c5b68c6c316 +Subproject commit 07f1151a8039a32ff09fe479869b268dd11ed514 diff --git a/fs/tmpfs/Kconfig b/fs/tmpfs/Kconfig index 2d75fd11e61..9eebf3b964c 100644 --- a/fs/tmpfs/Kconfig +++ b/fs/tmpfs/Kconfig @@ -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 diff --git a/fs/tmpfs/fs_tmpfs.c b/fs/tmpfs/fs_tmpfs.c index 54ac92fa874..be8e01e02da 100644 --- a/fs/tmpfs/fs_tmpfs.c +++ b/fs/tmpfs/fs_tmpfs.c @@ -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 */ diff --git a/fs/tmpfs/fs_tmpfs.h b/fs/tmpfs/fs_tmpfs.h index 18233b03400..5654136490b 100644 --- a/fs/tmpfs/fs_tmpfs.h +++ b/fs/tmpfs/fs_tmpfs.h @@ -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