lkml.org 
[lkml]   [2014]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/11] f2fs: punch the core function for inode management
    Date
    This patch punches out the core functions to manage the inode numbers.

    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    ---
    fs/f2fs/checkpoint.c | 81 ++++++++++++++++++++++++++++------------------------
    1 file changed, 44 insertions(+), 37 deletions(-)

    diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
    index 0b4710c..3e3c2c3 100644
    --- a/fs/f2fs/checkpoint.c
    +++ b/fs/f2fs/checkpoint.c
    @@ -282,6 +282,47 @@ const struct address_space_operations f2fs_meta_aops = {
    .set_page_dirty = f2fs_set_meta_page_dirty,
    };

    +static void __add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino)
    +{
    + struct list_head *head;
    + struct ino_entry *new, *e;
    +
    + new = f2fs_kmem_cache_alloc(orphan_entry_slab, GFP_ATOMIC);
    + new->ino = ino;
    +
    + spin_lock(&sbi->orphan_inode_lock);
    + list_for_each_entry(e, &sbi->orphan_inode_list, list) {
    + if (e->ino == ino) {
    + spin_unlock(&sbi->orphan_inode_lock);
    + kmem_cache_free(orphan_entry_slab, new);
    + return;
    + }
    + if (e->ino > ino)
    + break;
    + }
    +
    + /* add new entry into list which is sorted by inode number */
    + list_add_tail(&new->list, &e->list);
    + spin_unlock(&sbi->orphan_inode_lock);
    +}
    +
    +static void __remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino)
    +{
    + struct ino_entry *e;
    +
    + spin_lock(&sbi->orphan_inode_lock);
    + list_for_each_entry(e, &sbi->orphan_inode_list, list) {
    + if (e->ino == ino) {
    + list_del(&e->list);
    + sbi->n_orphans--;
    + spin_unlock(&sbi->orphan_inode_lock);
    + kmem_cache_free(orphan_entry_slab, e);
    + return;
    + }
    + }
    + spin_unlock(&sbi->orphan_inode_lock);
    +}
    +
    int acquire_orphan_inode(struct f2fs_sb_info *sbi)
    {
    int err = 0;
    @@ -306,48 +347,14 @@ void release_orphan_inode(struct f2fs_sb_info *sbi)

    void add_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
    {
    - struct list_head *head;
    - struct orphan_inode_entry *new, *orphan;
    -
    - new = f2fs_kmem_cache_alloc(orphan_entry_slab, GFP_ATOMIC);
    - new->ino = ino;
    -
    - spin_lock(&sbi->orphan_inode_lock);
    - head = &sbi->orphan_inode_list;
    - list_for_each_entry(orphan, head, list) {
    - if (orphan->ino == ino) {
    - spin_unlock(&sbi->orphan_inode_lock);
    - kmem_cache_free(orphan_entry_slab, new);
    - return;
    - }
    -
    - if (orphan->ino > ino)
    - break;
    - }
    -
    /* add new orphan entry into list which is sorted by inode number */
    - list_add_tail(&new->list, &orphan->list);
    - spin_unlock(&sbi->orphan_inode_lock);
    + __add_ino_entry(sbi, ino);
    }

    void remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
    {
    - struct list_head *head;
    - struct orphan_inode_entry *orphan;
    -
    - spin_lock(&sbi->orphan_inode_lock);
    - head = &sbi->orphan_inode_list;
    - list_for_each_entry(orphan, head, list) {
    - if (orphan->ino == ino) {
    - list_del(&orphan->list);
    - f2fs_bug_on(sbi->n_orphans == 0);
    - sbi->n_orphans--;
    - spin_unlock(&sbi->orphan_inode_lock);
    - kmem_cache_free(orphan_entry_slab, orphan);
    - return;
    - }
    - }
    - spin_unlock(&sbi->orphan_inode_lock);
    + /* remove orphan entry from orphan list */
    + __remove_ino_entry(sbi, ino);
    }

    static void recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
    --
    1.8.5.2 (Apple Git-48)


    \
     
     \ /
      Last update: 2014-07-26 01:21    [W:4.269 / U:0.324 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site