Commit a8203e4e authored by J. R. Okajima's avatar J. R. Okajima
Browse files

aufs: branch management, append and prepend



The interfaces to append and prepend branches.
They are the variations of "branch add" in another commit.
Signed-off-by: default avatarJ. R. Okajima <hooanon05g@gmail.com>
parent 83ab62e6
......@@ -16,7 +16,7 @@
enum {
Opt_br,
Opt_add,
Opt_add, Opt_append, Opt_prepend,
Opt_rdcache, Opt_rdblk, Opt_rdhash,
Opt_rdblk_def, Opt_rdhash_def,
Opt_xino, Opt_noxino,
......@@ -35,6 +35,15 @@ static match_table_t options = {
{Opt_br, "br=%s"},
{Opt_br, "br:%s"},
{Opt_add, "add=%d:%s"},
{Opt_add, "add:%d:%s"},
{Opt_add, "ins=%d:%s"},
{Opt_add, "ins:%d:%s"},
{Opt_append, "append=%s"},
{Opt_append, "append:%s"},
{Opt_prepend, "prepend=%s"},
{Opt_prepend, "prepend:%s"},
{Opt_xino, "xino=%s"},
{Opt_noxino, "noxino"},
{Opt_trunc_xino, "trunc_xino"},
......@@ -463,6 +472,18 @@ static void dump_opts(struct au_opts *opts)
u.add->bindex, u.add->pathname, u.add->perm,
u.add->path.dentry);
break;
case Opt_append:
u.add = &opt->add;
AuDbg("append {b%d, %s, 0x%x, %p}\n",
u.add->bindex, u.add->pathname, u.add->perm,
u.add->path.dentry);
break;
case Opt_prepend:
u.add = &opt->add;
AuDbg("prepend {b%d, %s, 0x%x, %p}\n",
u.add->bindex, u.add->pathname, u.add->perm,
u.add->path.dentry);
break;
case Opt_rdcache:
AuDbg("rdcache %d\n", opt->rdcache);
break;
......@@ -570,6 +591,8 @@ void au_opts_free(struct au_opts *opts)
while (opt->type != Opt_tail) {
switch (opt->type) {
case Opt_add:
case Opt_append:
case Opt_prepend:
path_put(&opt->add.path);
break;
case Opt_xino:
......@@ -739,6 +762,18 @@ int au_opts_parse(struct super_block *sb, char *str, struct au_opts *opts)
if (!err)
opt->type = token;
break;
case Opt_append:
err = opt_add(opt, a->args[0].from, opts->sb_flags,
/*dummy bindex*/1);
if (!err)
opt->type = token;
break;
case Opt_prepend:
err = opt_add(opt, a->args[0].from, opts->sb_flags,
/*bindex*/0);
if (!err)
opt->type = token;
break;
case Opt_xino:
err = au_opts_parse_xino(sb, &opt->xino, a->args);
......@@ -1053,6 +1088,14 @@ static int au_opt_br(struct super_block *sb, struct au_opt *opt,
err = 0;
switch (opt->type) {
case Opt_append:
opt->add.bindex = au_sbbot(sb) + 1;
if (opt->add.bindex < 0)
opt->add.bindex = 0;
goto add;
case Opt_prepend:
opt->add.bindex = 0;
add: /* indented label */
case Opt_add:
err = au_br_add(sb, &opt->add,
au_ftest_opts(opts->flags, REMOUNT));
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment