struct match_list *iter;
        bool take_write = false;
        struct fs_fte *fte;
-       u64  version;
+       u64  version = 0;
        int err;
 
        fte = alloc_fte(ft, spec, flow_act);
                return  ERR_PTR(-ENOMEM);
 
 search_again_locked:
-       version = matched_fgs_get_version(match_head);
        if (flow_act->flags & FLOW_ACT_NO_APPEND)
                goto skip_search;
-       /* Try to find a fg that already contains a matching fte */
+       version = matched_fgs_get_version(match_head);
+       /* Try to find an fte with identical match value and attempt update its
+        * action.
+        */
        list_for_each_entry(iter, match_head, list) {
                struct fs_fte *fte_tmp;
 
                goto out;
        }
 
-       /* Check the fgs version, for case the new FTE with the
-        * same values was added while the fgs weren't locked
+       /* Check the fgs version. If version have changed it could be that an
+        * FTE with the same match value was added while the fgs weren't
+        * locked.
         */
-       if (version != matched_fgs_get_version(match_head)) {
+       if (!(flow_act->flags & FLOW_ACT_NO_APPEND) &&
+           version != matched_fgs_get_version(match_head)) {
                take_write = true;
                goto search_again_locked;
        }