mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 03:45:50 +08:00
littlefs_open: sync the file only when O_TRUNC is specified
Because sync is a rather expensive operation. While I'm here, improve the comment after the recent discussion in https://github.com/apache/nuttx/pull/2913. IMHO, we should not perform the sync even for O_TRUNC. But I'm not going to propose the change for now. Signed-off-by: YAMAMOTO Takashi <yamamoto@midokura.com>
This commit is contained in:
committed by
Xiang Xiao
parent
db91b3b53c
commit
b59373b270
+18
-3
@@ -424,11 +424,26 @@ static int littlefs_open(FAR struct file *filep, FAR const char *relpath,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sync here in case of O_TRUNC haven't actually done immediately,
|
/* In case of O_TRUNC, sync to commit the truncation.
|
||||||
* e.g. total 8M, fileA 6M, O_TRUNC re-wrting fileA 6M, meet error.
|
*
|
||||||
|
* For example, consider a 6MB file on an 8MB filesystem.
|
||||||
|
* Open the file with O_TRUNC and (re)write some data until it grows
|
||||||
|
* to 6MB. Without this sync, it ends up with ENOSPC because
|
||||||
|
* littlefs doesn't commit the updates until sync/close and thus
|
||||||
|
* doesn't recycle the truncated space. Although it's normal for
|
||||||
|
* filesystems like littlefs, we automatically sync the truncation
|
||||||
|
* here to allow such a sequence to succeed, assuming it's what many
|
||||||
|
* of NuttX users expect.
|
||||||
|
*
|
||||||
|
* CAVEAT: On the other hand, this might surprise users who are familiar
|
||||||
|
* with the bare littlefs semantics.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
lfs_file_sync(&fs->lfs, &priv->file);
|
if (oflags & LFS_O_TRUNC)
|
||||||
|
{
|
||||||
|
lfs_file_sync(&fs->lfs, &priv->file);
|
||||||
|
}
|
||||||
|
|
||||||
nxmutex_unlock(&fs->lock);
|
nxmutex_unlock(&fs->lock);
|
||||||
|
|
||||||
/* Attach the private date to the struct file instance */
|
/* Attach the private date to the struct file instance */
|
||||||
|
|||||||
Reference in New Issue
Block a user