return -EOPNOTSUPP;
        }
 
+       if ((changed_flags & I40E_FLAG_LEGACY_RX) &&
+           I40E_2K_TOO_SMALL_WITH_PADDING) {
+               dev_warn(&pf->pdev->dev,
+                        "2k Rx buffer is too small to fit standard MTU and skb_shared_info\n");
+               return -EOPNOTSUPP;
+       }
+
        if ((changed_flags & new_flags &
             I40E_FLAG_LINK_DOWN_ON_CLOSE_ENABLED) &&
            (new_flags & I40E_FLAG_MFP_ENABLED))
 
 static u16 i40e_calculate_vsi_rx_buf_len(struct i40e_vsi *vsi)
 {
        if (!vsi->netdev || (vsi->back->flags & I40E_FLAG_LEGACY_RX))
-               return I40E_RXBUFFER_2048;
+               return SKB_WITH_OVERHEAD(I40E_RXBUFFER_2048);
 
        return PAGE_SIZE < 8192 ? I40E_RXBUFFER_3072 : I40E_RXBUFFER_2048;
 }
        }
 
        /* configure Rx buffer alignment */
-       if (!vsi->netdev || (vsi->back->flags & I40E_FLAG_LEGACY_RX))
+       if (!vsi->netdev || (vsi->back->flags & I40E_FLAG_LEGACY_RX)) {
+               if (I40E_2K_TOO_SMALL_WITH_PADDING) {
+                       dev_info(&vsi->back->pdev->dev,
+                                "2k Rx buffer is too small to fit standard MTU and skb_shared_info\n");
+                       return -EOPNOTSUPP;
+               }
                clear_ring_build_skb_enabled(ring);
-       else
+       } else {
                set_ring_build_skb_enabled(ring);
+       }
 
        ring->rx_offset = i40e_rx_offset(ring);