diff --git a/SOURCES/openvswitch-2.16.0.patch b/SOURCES/openvswitch-2.16.0.patch
index 21b015a..be9f6c5 100644
--- a/SOURCES/openvswitch-2.16.0.patch
+++ b/SOURCES/openvswitch-2.16.0.patch
@@ -2433,6 +2433,52 @@ index b30a11c24b..41835f6f4d 100644
          return NULL;
      }
  
+diff --git a/lib/tc.c b/lib/tc.c
+index 38a1dfc0eb..adb2d3182a 100644
+--- a/lib/tc.c
++++ b/lib/tc.c
+@@ -2545,6 +2545,17 @@ nl_msg_put_flower_rewrite_pedits(struct ofpbuf *request,
+     return 0;
+ }
+ 
++static void
++nl_msg_put_flower_acts_release(struct ofpbuf *request, uint16_t act_index)
++{
++    size_t act_offset;
++
++    act_offset = nl_msg_start_nested(request, act_index);
++    nl_msg_put_act_tunnel_key_release(request);
++    nl_msg_put_act_flags(request);
++    nl_msg_end_nested(request, act_offset);
++}
++
+ static int
+ nl_msg_put_flower_acts(struct ofpbuf *request, struct tc_flower *flower)
+ {
+@@ -2579,6 +2590,11 @@ nl_msg_put_flower_acts(struct ofpbuf *request, struct tc_flower *flower)
+             }
+             break;
+             case TC_ACT_ENCAP: {
++                if (!released && flower->tunnel) {
++                    nl_msg_put_flower_acts_release(request, act_index++);
++                    released = true;
++                }
++
+                 act_offset = nl_msg_start_nested(request, act_index++);
+                 nl_msg_put_act_tunnel_key_set(request, action->encap.id_present,
+                                               action->encap.id,
+@@ -2636,10 +2652,7 @@ nl_msg_put_flower_acts(struct ofpbuf *request, struct tc_flower *flower)
+             break;
+             case TC_ACT_OUTPUT: {
+                 if (!released && flower->tunnel) {
+-                    act_offset = nl_msg_start_nested(request, act_index++);
+-                    nl_msg_put_act_tunnel_key_release(request);
+-                    nl_msg_put_act_flags(request);
+-                    nl_msg_end_nested(request, act_offset);
++                    nl_msg_put_flower_acts_release(request, act_index++);
+                     released = true;
+                 }
+ 
 diff --git a/lib/tnl-neigh-cache.c b/lib/tnl-neigh-cache.c
 index 5bda4af7e0..995c88bf17 100644
 --- a/lib/tnl-neigh-cache.c
diff --git a/SPECS/openvswitch2.16.spec b/SPECS/openvswitch2.16.spec
index 4d003d9..b98efb8 100644
--- a/SPECS/openvswitch2.16.spec
+++ b/SPECS/openvswitch2.16.spec
@@ -57,7 +57,7 @@ Summary: Open vSwitch
 Group: System Environment/Daemons daemon/database/utilities
 URL: http://www.openvswitch.org/
 Version: 2.16.0
-Release: 49%{?dist}
+Release: 50%{?dist}
 
 # Nearly all of openvswitch is ASL 2.0.  The bugtool is LGPLv2+, and the
 # lib/sflow*.[ch] files are SISSL
@@ -699,6 +699,12 @@ exit 0
 %endif
 
 %changelog
+* Wed Feb 09 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-50
+- Merging upstream branch-2.16 [RH git: c5ad7f71c5]
+    Commit list:
+    867e586b45 tc: Fix incorrect TC rule for decap+encap datapath flow.
+
+
 * Tue Feb 08 2022 Open vSwitch CI <ovs-ci@redhat.com> - 2.16.0-49
 - Merging upstream branch-2.16 [RH git: 4541c91b99]
     Commit list: