-+
-+ pc = tcf_hash_create(0, est, a, sizeof(*pc), bind,
-+ &connmark_idx_gen, &connmark_hash_info);
-+ if (IS_ERR(pc))
-+ return PTR_ERR(pc);
-+
-+ tcf_hash_insert(pc, &connmark_hash_info);
-+
-+ return ACT_P_CREATED;
++ int ret = 0;
++
++ pc = tcf_hash_check(0, a, bind, &connmark_hash_info);
++ if (!pc) {
++ pc = tcf_hash_create(0, est, a, sizeof(*pc), bind,
++ &connmark_idx_gen, &connmark_hash_info);
++ if (IS_ERR(pc))
++ return PTR_ERR(pc);
++
++ tcf_hash_insert(pc, &connmark_hash_info);
++ ret = ACT_P_CREATED;
++ } else {
++ if (!ovr) {
++ tcf_hash_release(pc, bind, &connmark_hash_info);
++ return -EEXIST;
++ }
++ }
++
++ return ret;