The fast path (L2007) of this function should be called as early as possible. I don't fully understand the semantics of the function, but is this fast path condition dependent on all the conditional branches before it? The branches seem poorly structured regardless (lots of redundant conditions).
Please post design questions to mailing list netdev@vger.kernel.org not bugzilla