summaryrefslogtreecommitdiff
path: root/fs/aufs/xino.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/aufs/xino.c')
-rw-r--r--fs/aufs/xino.c21
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))