diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-10-06 20:39:50 -0400 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-10-06 20:39:50 -0400 |
commit | 88b88a66797159949cec32eaab12b4968f6fae2d (patch) | |
tree | da80cebeb9cc86d5f9f16718ce7921eef16ed30e /fs/f2fs/super.c | |
parent | 120c2cba1d76494a68e36a11eb630cb335ed1494 (diff) |
f2fs: support atomic writes
This patch introduces a very limited functionality for atomic write support.
In order to support atomic write, this patch adds two ioctls:
o F2FS_IOC_START_ATOMIC_WRITE
o F2FS_IOC_COMMIT_ATOMIC_WRITE
The database engine should be aware of the following sequence.
1. open
-> ioctl(F2FS_IOC_START_ATOMIC_WRITE);
2. writes
: all the written data will be treated as atomic pages.
3. commit
-> ioctl(F2FS_IOC_COMMIT_ATOMIC_WRITE);
: this flushes all the data blocks to the disk, which will be shown all or
nothing by f2fs recovery procedure.
4. repeat to #2.
The IO pattens should be:
,- START_ATOMIC_WRITE ,- COMMIT_ATOMIC_WRITE
CP | D D D D D D | FSYNC | D D D D | FSYNC ...
`- COMMIT_ATOMIC_WRITE
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/super.c')
-rw-r--r-- | fs/f2fs/super.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index bb6b568d6ad4..41d6f700f4ee 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c | |||
@@ -373,6 +373,8 @@ static struct inode *f2fs_alloc_inode(struct super_block *sb) | |||
373 | fi->i_advise = 0; | 373 | fi->i_advise = 0; |
374 | rwlock_init(&fi->ext.ext_lock); | 374 | rwlock_init(&fi->ext.ext_lock); |
375 | init_rwsem(&fi->i_sem); | 375 | init_rwsem(&fi->i_sem); |
376 | INIT_LIST_HEAD(&fi->inmem_pages); | ||
377 | mutex_init(&fi->inmem_lock); | ||
376 | 378 | ||
377 | set_inode_flag(fi, FI_NEW_INODE); | 379 | set_inode_flag(fi, FI_NEW_INODE); |
378 | 380 | ||