kfree(trans);
 }
 
+static void nf_tables_unregister_hooks(const struct nft_table *table,
+                                      const struct nft_chain *chain,
+                                      unsigned int hook_nops)
+{
+       if (!(table->flags & NFT_TABLE_F_DORMANT) &&
+           chain->flags & NFT_BASE_CHAIN)
+               nf_unregister_hooks(nft_base_chain(chain)->ops, hook_nops);
+}
+
 /*
  * Tables
  */
        list_add_tail_rcu(&chain->list, &table->chains);
        return 0;
 err2:
-       if (!(table->flags & NFT_TABLE_F_DORMANT) &&
-           chain->flags & NFT_BASE_CHAIN) {
-               nf_unregister_hooks(nft_base_chain(chain)->ops,
-                                   afi->nops);
-       }
+       nf_tables_unregister_hooks(table, chain, afi->nops);
 err1:
        nf_tables_chain_destroy(chain);
        return err;
                        break;
                case NFT_MSG_DELCHAIN:
                        nf_tables_chain_notify(&trans->ctx, NFT_MSG_DELCHAIN);
-                       if (!(trans->ctx.table->flags & NFT_TABLE_F_DORMANT) &&
-                           trans->ctx.chain->flags & NFT_BASE_CHAIN) {
-                               nf_unregister_hooks(nft_base_chain(trans->ctx.chain)->ops,
-                                                   trans->ctx.afi->nops);
-                       }
+                       nf_tables_unregister_hooks(trans->ctx.table,
+                                                  trans->ctx.chain,
+                                                  trans->ctx.afi->nops);
                        break;
                case NFT_MSG_NEWRULE:
                        nft_rule_clear(trans->ctx.net, nft_trans_rule(trans));
                        } else {
                                trans->ctx.table->use--;
                                list_del_rcu(&trans->ctx.chain->list);
-                               if (!(trans->ctx.table->flags & NFT_TABLE_F_DORMANT) &&
-                                   trans->ctx.chain->flags & NFT_BASE_CHAIN) {
-                                       nf_unregister_hooks(nft_base_chain(trans->ctx.chain)->ops,
-                                                           trans->ctx.afi->nops);
-                               }
+                               nf_tables_unregister_hooks(trans->ctx.table,
+                                                          trans->ctx.chain,
+                                                          trans->ctx.afi->nops);
                        }
                        break;
                case NFT_MSG_DELCHAIN: