skb_pull(skb, hlen);
 }
 
-static void ovs_fragment(struct vport *vport, struct sk_buff *skb, u16 mru,
-                        __be16 ethertype)
+static void ovs_fragment(struct net *net, struct vport *vport,
+                        struct sk_buff *skb, u16 mru, __be16 ethertype)
 {
        if (skb_network_offset(skb) > MAX_L2_LEN) {
                OVS_NLERR(1, "L2 header too long to fragment");
                if (likely(!mru || (skb->len <= mru + ETH_HLEN))) {
                        ovs_vport_send(vport, skb);
                } else if (mru <= vport->dev->mtu) {
+                       struct net *net = read_pnet(&dp->net);
                        __be16 ethertype = key->eth.type;
 
                        if (!is_flow_key_valid(key)) {
                                        ethertype = vlan_get_protocol(skb);
                        }
 
-                       ovs_fragment(vport, skb, mru, ethertype);
+                       ovs_fragment(net, vport, skb, mru, ethertype);
                } else {
                        kfree_skb(skb);
                }