static int noinline_for_stack br_perm_val(char *perm) { int val; char *p; substring_t args[MAX_OPT_ARGS]; p = strchr(perm, '+'); if (p) *p = 0; val = match_token(perm, brperm, args); if (!val) { if (p) *p = '+'; pr_warning("ignored branch permission %s\n", perm); val = AuBrPerm_RO; goto out; } if (!p) goto out; switch (val) { case AuBrPerm_RO: case AuBrPerm_RR: val |= br_attr_val(p + 1, brrattr, args); break; case AuBrPerm_RW: val |= br_attr_val(p + 1, brwattr, args); break; } out: return val; }
static int noinline_for_stack br_perm_val(char *perm) { int val, bad, sz; char *p; substring_t args[MAX_OPT_ARGS]; au_br_perm_str_t attr; p = strchr(perm, '+'); if (p) *p = 0; val = match_token(perm, brperm, args); if (!val) { if (p) *p = '+'; pr_warn("ignored branch permission %s\n", perm); val = AuBrPerm_RO; goto out; } if (!p) goto out; val |= br_attr_val(p + 1, brattr, args); bad = 0; switch (val & AuBrPerm_Mask) { case AuBrPerm_RO: case AuBrPerm_RR: bad = val & AuBrWAttr_Mask; val &= ~AuBrWAttr_Mask; break; case AuBrPerm_RW: bad = val & AuBrRAttr_Mask; val &= ~AuBrRAttr_Mask; break; } /* * 'unpin' attrib becomes meaningless since linux-3.18-rc1, but aufs * does not treat it as an error, just warning. * this is a tiny guard for the user operation. */ if (val & AuBrAttr_UNPIN) { bad |= AuBrAttr_UNPIN; val &= ~AuBrAttr_UNPIN; } if (unlikely(bad)) { sz = au_do_optstr_br_attr(&attr, bad); AuDebugOn(!sz); pr_warn("ignored branch attribute %s\n", attr.a); } out: return val; }
static int noinline_for_stack br_perm_val(char *perm) { int val; char *p, *q; substring_t args[MAX_OPT_ARGS]; p = strchr(perm, '+'); if (p) *p = 0; val = match_token(perm, brperm, args); if (!val) { if (p) *p = '+'; pr_warn("ignored branch permission %s\n", perm); val = AuBrPerm_RO; goto out; } if (!p) goto out; p++; while (1) { q = strchr(p, '+'); if (q) *q = 0; val |= br_attr_val(p, brattr, args); if (q) { *q = '+'; p = q + 1; } else break; } switch (val & AuBrPerm_Mask) { case AuBrPerm_RO: case AuBrPerm_RR: if (unlikely(val & AuBrWAttr_NoLinkWH)) { pr_warn("ignored branch attribute %s\n", AUFS_BRWATTR_NLWH); val &= ~AuBrWAttr_NoLinkWH; } break; case AuBrPerm_RW: if (unlikely(val & AuBrRAttr_WH)) { pr_warn("ignored branch attribute %s\n", AUFS_BRRATTR_WH); val &= ~AuBrRAttr_WH; } break; } out: return val; }
static int noinline_for_stack br_perm_val(char *perm) { int val, bad, sz; char *p; substring_t args[MAX_OPT_ARGS]; au_br_perm_str_t attr; p = strchr(perm, '+'); if (p) *p = 0; val = match_token(perm, brperm, args); if (!val) { if (p) *p = '+'; pr_warn("ignored branch permission %s\n", perm); val = AuBrPerm_RO; goto out; } if (!p) goto out; val |= br_attr_val(p + 1, brattr, args); bad = 0; switch (val & AuBrPerm_Mask) { case AuBrPerm_RO: case AuBrPerm_RR: bad = val & AuBrWAttr_Mask; val &= ~AuBrWAttr_Mask; break; case AuBrPerm_RW: bad = val & AuBrRAttr_Mask; val &= ~AuBrRAttr_Mask; break; } if (unlikely(bad)) { sz = au_do_optstr_br_attr(&attr, bad); AuDebugOn(!sz); pr_warn("ignored branch attribute %s\n", attr.a); } out: return val; }