segment.c (0341845efcb4a656707b6d551c3057d6dd27009f) | segment.c (9be32d72becca41d7d9b010d7d9be1d39489414f) |
---|---|
1/* 2 * fs/f2fs/segment.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 165 unchanged lines hidden (view full) --- 174 return result + __reverse_ffz(tmp); 175} 176 177void register_inmem_page(struct inode *inode, struct page *page) 178{ 179 struct f2fs_inode_info *fi = F2FS_I(inode); 180 struct inmem_pages *new; 181 int err; | 1/* 2 * fs/f2fs/segment.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 165 unchanged lines hidden (view full) --- 174 return result + __reverse_ffz(tmp); 175} 176 177void register_inmem_page(struct inode *inode, struct page *page) 178{ 179 struct f2fs_inode_info *fi = F2FS_I(inode); 180 struct inmem_pages *new; 181 int err; |
182retry: | 182 |
183 new = f2fs_kmem_cache_alloc(inmem_entry_slab, GFP_NOFS); 184 185 /* add atomic page indices to the list */ 186 new->page = page; 187 INIT_LIST_HEAD(&new->list); | 183 new = f2fs_kmem_cache_alloc(inmem_entry_slab, GFP_NOFS); 184 185 /* add atomic page indices to the list */ 186 new->page = page; 187 INIT_LIST_HEAD(&new->list); |
188 | 188retry: |
189 /* increase reference count with clean state */ 190 mutex_lock(&fi->inmem_lock); 191 err = radix_tree_insert(&fi->inmem_root, page->index, new); 192 if (err == -EEXIST) { 193 mutex_unlock(&fi->inmem_lock); 194 kmem_cache_free(inmem_entry_slab, new); 195 return; 196 } else if (err) { 197 mutex_unlock(&fi->inmem_lock); | 189 /* increase reference count with clean state */ 190 mutex_lock(&fi->inmem_lock); 191 err = radix_tree_insert(&fi->inmem_root, page->index, new); 192 if (err == -EEXIST) { 193 mutex_unlock(&fi->inmem_lock); 194 kmem_cache_free(inmem_entry_slab, new); 195 return; 196 } else if (err) { 197 mutex_unlock(&fi->inmem_lock); |
198 kmem_cache_free(inmem_entry_slab, new); | |
199 goto retry; 200 } 201 get_page(page); 202 list_add_tail(&new->list, &fi->inmem_pages); 203 mutex_unlock(&fi->inmem_lock); 204} 205 206void invalidate_inmem_page(struct inode *inode, struct page *page) --- 2060 unchanged lines hidden --- | 198 goto retry; 199 } 200 get_page(page); 201 list_add_tail(&new->list, &fi->inmem_pages); 202 mutex_unlock(&fi->inmem_lock); 203} 204 205void invalidate_inmem_page(struct inode *inode, struct page *page) --- 2060 unchanged lines hidden --- |