diff -ru5 -N patch_1/fs/aufs/opts.c patch/fs/aufs/opts.c --- patch_1/fs/aufs/opts.c 2013-09-07 21:43:52.000000000 +0200 +++ patch/fs/aufs/opts.c 2013-09-07 22:20:30.000000000 +0200 @@ -469,12 +469,16 @@ { return au_parser_pattern(wbr_create, (void *)au_wbr_create_policy); } static match_table_t au_wbr_copyup_policy = { - {AuWbrCopyup_TDP, "tdp"}, - {AuWbrCopyup_TDP, "top-down-parent"}, + {AuWbrCopyup_TDP_B, "tdp:b"}, + {AuWbrCopyup_TDP_B, "top-down-parent:b"}, + {AuWbrCopyup_TDP_B, "tdp"}, + {AuWbrCopyup_TDP_B, "top-down-parent"}, + {AuWbrCopyup_TDP_T, "tdp:t"}, + {AuWbrCopyup_TDP_T, "top-down-parent:t"}, {AuWbrCopyup_BUP, "bup"}, {AuWbrCopyup_BUP, "bottom-up-parent"}, {AuWbrCopyup_BU, "bu"}, {AuWbrCopyup_BU, "bottom-up"}, {-1, NULL} diff -ru5 -N patch_1/fs/aufs/opts.h patch/fs/aufs/opts.h --- patch_1/fs/aufs/opts.h 2013-09-07 21:43:52.000000000 +0200 +++ patch/fs/aufs/opts.h 2013-09-07 22:20:30.000000000 +0200 @@ -107,15 +107,16 @@ AuWbrCreate_Def = AuWbrCreate_TDP }; enum { - AuWbrCopyup_TDP, /* top down parent */ + AuWbrCopyup_TDP_B, /* top down parent, fallback "buttom up" */ + AuWbrCopyup_TDP_T, /* top down parent, fallback "top down" */ AuWbrCopyup_BUP, /* bottom up parent */ AuWbrCopyup_BU, /* bottom up */ - AuWbrCopyup_Def = AuWbrCopyup_TDP + AuWbrCopyup_Def = AuWbrCopyup_TDP_B }; /* ---------------------------------------------------------------------- */ struct au_opt_add { diff -ru5 -N patch_1/fs/aufs/wbr_policy.c patch/fs/aufs/wbr_policy.c --- patch_1/fs/aufs/wbr_policy.c 2013-09-07 21:43:52.000000000 +0200 +++ patch/fs/aufs/wbr_policy.c 2013-09-07 22:26:50.000000000 +0200 @@ -636,13 +636,18 @@ /* ---------------------------------------------------------------------- */ /* policies for copyup */ /* top down parent */ -static int au_wbr_copyup_tdp(struct dentry *dentry) +static int au_wbr_copyup_tdp_b(struct dentry *dentry) { - return au_wbr_create_tdp(dentry, /*flags, anything is ok*/0); + return au_wbr_create_tdp_b(dentry, /*flags, anything is ok*/0); +} + +static int au_wbr_copyup_tdp_t(struct dentry *dentry) +{ + return au_wbr_create_tdp_t(dentry, /*isdir, anything is ok*/0); } /* bottom up parent */ static int au_wbr_copyup_bup(struct dentry *dentry) { @@ -692,13 +697,16 @@ } /* ---------------------------------------------------------------------- */ struct au_wbr_copyup_operations au_wbr_copyup_ops[] = { - [AuWbrCopyup_TDP] = { - .copyup = au_wbr_copyup_tdp + [AuWbrCopyup_TDP_B] = { + .copyup = au_wbr_copyup_tdp_b }, + [AuWbrCopyup_TDP_T] = { + .copyup = au_wbr_copyup_tdp_t + }, [AuWbrCopyup_BUP] = { .copyup = au_wbr_copyup_bup }, [AuWbrCopyup_BU] = { .copyup = au_wbr_copyup_bu