diff options
Diffstat (limited to 'fs/aufs/xino.c')
-rw-r--r-- | fs/aufs/xino.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/fs/aufs/xino.c b/fs/aufs/xino.c index 4d1d5d439..2a411f9c7 100644 --- a/fs/aufs/xino.c +++ b/fs/aufs/xino.c @@ -325,7 +325,7 @@ int au_xino_trunc(struct super_block *sb, aufs_bindex_t bindex) AuErr1("statfs err %d, ignored\n", err); out_st: - kfree(st); + au_delayed_kfree(st); out: return err; } @@ -360,7 +360,7 @@ static void xino_do_trunc(void *_args) au_br_put(br); si_write_unlock(sb); au_nwt_done(&au_sbi(sb)->si_nowait); - kfree(args); + au_delayed_kfree(args); } static int xino_trunc_test(struct super_block *sb, struct au_branch *br) @@ -402,7 +402,7 @@ static void xino_try_trunc(struct super_block *sb, struct au_branch *br) args = kmalloc(sizeof(*args), GFP_NOFS); if (unlikely(!args)) { AuErr1("no memory\n"); - goto out_args; + goto out; } au_br_get(br); @@ -414,9 +414,8 @@ static void xino_try_trunc(struct super_block *sb, struct au_branch *br) pr_err("wkq %d\n", wkq_err); au_br_put(br); + au_delayed_kfree(args); -out_args: - kfree(args); out: atomic_dec(&br->br_xino_running); } @@ -939,7 +938,7 @@ static int xib_restore(struct super_block *sb) (sb, au_sbr(sb, bindex)->br_xino.xi_file, page); else AuDbg("b%d\n", bindex); - free_page((unsigned long)page); + au_delayed_free_page((unsigned long)page); out: return err; @@ -1016,7 +1015,8 @@ static void xino_clear_xib(struct super_block *sb) if (sbinfo->si_xib) fput(sbinfo->si_xib); sbinfo->si_xib = NULL; - free_page((unsigned long)sbinfo->si_xib_buf); + if (sbinfo->si_xib_buf) + au_delayed_free_page((unsigned long)sbinfo->si_xib_buf); sbinfo->si_xib_buf = NULL; } @@ -1059,7 +1059,8 @@ static int au_xino_set_xib(struct super_block *sb, struct file *base) goto out; /* success */ out_free: - free_page((unsigned long)sbinfo->si_xib_buf); + if (sbinfo->si_xib_buf) + au_delayed_free_page((unsigned long)sbinfo->si_xib_buf); sbinfo->si_xib_buf = NULL; if (err >= 0) err = -EIO; @@ -1152,7 +1153,7 @@ out_pair: fput(p->new); else break; - kfree(fpair); + au_delayed_kfree(fpair); out: return err; } @@ -1263,7 +1264,7 @@ struct file *au_xino_def(struct super_block *sb) if (!IS_ERR(file)) au_xino_brid_set(sb, br->br_id); } - free_page((unsigned long)page); + au_delayed_free_page((unsigned long)page); } else { file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0); if (IS_ERR(file)) |