diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index d964e60c730eafb79a8a9437325e14c8d6288e40..c79f6e71512e5ec48b48ae7ec87a77c1c3ddd469 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -977,7 +977,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
 	return 0;
 
 errout_idr:
-	if (fnew->handle)
+	if (!fold)
 		idr_remove(&head->handle_idr, fnew->handle);
 errout:
 	tcf_exts_destroy(&fnew->exts);