summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/segment.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/segment.c')
-rw-r--r--fs/f2fs/segment.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 18584d4c078a..204524943bc6 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -185,8 +185,6 @@ bool f2fs_need_SSR(struct f2fs_sb_info *sbi)
185 185
186void f2fs_register_inmem_page(struct inode *inode, struct page *page) 186void f2fs_register_inmem_page(struct inode *inode, struct page *page)
187{ 187{
188 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
189 struct f2fs_inode_info *fi = F2FS_I(inode);
190 struct inmem_pages *new; 188 struct inmem_pages *new;
191 189
192 f2fs_trace_pid(page); 190 f2fs_trace_pid(page);
@@ -200,15 +198,11 @@ void f2fs_register_inmem_page(struct inode *inode, struct page *page)
200 INIT_LIST_HEAD(&new->list); 198 INIT_LIST_HEAD(&new->list);
201 199
202 /* increase reference count with clean state */ 200 /* increase reference count with clean state */
203 mutex_lock(&fi->inmem_lock);
204 get_page(page); 201 get_page(page);
205 list_add_tail(&new->list, &fi->inmem_pages); 202 mutex_lock(&F2FS_I(inode)->inmem_lock);
206 spin_lock(&sbi->inode_lock[ATOMIC_FILE]); 203 list_add_tail(&new->list, &F2FS_I(inode)->inmem_pages);
207 if (list_empty(&fi->inmem_ilist))
208 list_add_tail(&fi->inmem_ilist, &sbi->inode_list[ATOMIC_FILE]);
209 spin_unlock(&sbi->inode_lock[ATOMIC_FILE]);
210 inc_page_count(F2FS_I_SB(inode), F2FS_INMEM_PAGES); 204 inc_page_count(F2FS_I_SB(inode), F2FS_INMEM_PAGES);
211 mutex_unlock(&fi->inmem_lock); 205 mutex_unlock(&F2FS_I(inode)->inmem_lock);
212 206
213 trace_f2fs_register_inmem_page(page, INMEM); 207 trace_f2fs_register_inmem_page(page, INMEM);
214} 208}
@@ -330,19 +324,17 @@ void f2fs_drop_inmem_pages(struct inode *inode)
330 mutex_lock(&fi->inmem_lock); 324 mutex_lock(&fi->inmem_lock);
331 __revoke_inmem_pages(inode, &fi->inmem_pages, 325 __revoke_inmem_pages(inode, &fi->inmem_pages,
332 true, false, true); 326 true, false, true);
333
334 if (list_empty(&fi->inmem_pages)) {
335 spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
336 if (!list_empty(&fi->inmem_ilist))
337 list_del_init(&fi->inmem_ilist);
338 spin_unlock(&sbi->inode_lock[ATOMIC_FILE]);
339 }
340 mutex_unlock(&fi->inmem_lock); 327 mutex_unlock(&fi->inmem_lock);
341 } 328 }
342 329
343 clear_inode_flag(inode, FI_ATOMIC_FILE); 330 clear_inode_flag(inode, FI_ATOMIC_FILE);
344 fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0; 331 fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0;
345 stat_dec_atomic_write(inode); 332 stat_dec_atomic_write(inode);
333
334 spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
335 if (!list_empty(&fi->inmem_ilist))
336 list_del_init(&fi->inmem_ilist);
337 spin_unlock(&sbi->inode_lock[ATOMIC_FILE]);
346} 338}
347 339
348void f2fs_drop_inmem_page(struct inode *inode, struct page *page) 340void f2fs_drop_inmem_page(struct inode *inode, struct page *page)
@@ -471,11 +463,6 @@ int f2fs_commit_inmem_pages(struct inode *inode)
471 463
472 mutex_lock(&fi->inmem_lock); 464 mutex_lock(&fi->inmem_lock);
473 err = __f2fs_commit_inmem_pages(inode); 465 err = __f2fs_commit_inmem_pages(inode);
474
475 spin_lock(&sbi->inode_lock[ATOMIC_FILE]);
476 if (!list_empty(&fi->inmem_ilist))
477 list_del_init(&fi->inmem_ilist);
478 spin_unlock(&sbi->inode_lock[ATOMIC_FILE]);
479 mutex_unlock(&fi->inmem_lock); 466 mutex_unlock(&fi->inmem_lock);
480 467
481 clear_inode_flag(inode, FI_ATOMIC_COMMIT); 468 clear_inode_flag(inode, FI_ATOMIC_COMMIT);