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 ---