static struct zonelist *policy_zonelist(gfp_t gfp, struct mempolicy *policy,
        int nd)
 {
-       switch (policy->mode) {
-       case MPOL_PREFERRED:
-               if (!(policy->flags & MPOL_F_LOCAL))
-                       nd = policy->v.preferred_node;
-               break;
-       case MPOL_BIND:
+       if (policy->mode == MPOL_PREFERRED && !(policy->flags & MPOL_F_LOCAL))
+               nd = policy->v.preferred_node;
+       else {
                /*
-                * Normally, MPOL_BIND allocations are node-local within the
-                * allowed nodemask.  However, if __GFP_THISNODE is set and the
-                * current node isn't part of the mask, we use the zonelist for
-                * the first node in the mask instead.
+                * __GFP_THISNODE shouldn't even be used with the bind policy
+                * because we might easily break the expectation to stay on the
+                * requested node and not break the policy.
                 */
-               if (unlikely(gfp & __GFP_THISNODE) &&
-                               unlikely(!node_isset(nd, policy->v.nodes)))
-                       nd = first_node(policy->v.nodes);
-               break;
-       default:
-               BUG();
+               WARN_ON_ONCE(policy->mode == MPOL_BIND && (gfp & __GFP_THISNODE));
        }
+
        return node_zonelist(nd, gfp);
 }