diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c
index 456ee6e62dfa8690ade04284873d6d386d084ba5..ad036b00427d92859393773eb0a9d99e2da14e4b 100644
--- a/net/sched/cls_fw.c
+++ b/net/sched/cls_fw.c
@@ -363,7 +363,10 @@ static void fw_walk(struct tcf_proto *tp, struct tcf_walker *arg,
 	struct fw_head *head = rtnl_dereference(tp->root);
 	int h;
 
-	if (head == NULL || arg->stop)
+	if (head == NULL)
+		arg->stop = 1;
+
+	if (arg->stop)
 		return;
 
 	for (h = 0; h < HTSIZE; h++) {