struct nft_trans *trans, *next;
        LIST_HEAD(set_update_list);
        struct nft_trans_elem *te;
+       int err = 0;
 
        if (action == NFNL_ABORT_VALIDATE &&
            nf_tables_validate(net) < 0)
-               return -EAGAIN;
+               err = -EAGAIN;
 
        list_for_each_entry_safe_reverse(trans, next, &nft_net->commit_list,
                                         list) {
        else
                nf_tables_module_autoload_cleanup(net);
 
-       return 0;
+       return err;
 }
 
 static int nf_tables_abort(struct net *net, struct sk_buff *skb,
        gc_seq = nft_gc_seq_begin(nft_net);
        ret = __nf_tables_abort(net, action);
        nft_gc_seq_end(nft_net, gc_seq);
+
+       WARN_ON_ONCE(!list_empty(&nft_net->commit_list));
+
        mutex_unlock(&nft_net->commit_mutex);
 
        return ret;
 
        gc_seq = nft_gc_seq_begin(nft_net);
 
-       if (!list_empty(&nft_net->commit_list) ||
-           !list_empty(&nft_net->module_list))
-               __nf_tables_abort(net, NFNL_ABORT_NONE);
+       WARN_ON_ONCE(!list_empty(&nft_net->commit_list));
+
+       if (!list_empty(&nft_net->module_list))
+               nf_tables_module_autoload_cleanup(net);
 
        __nft_release_tables(net);