Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] IB/core: use correct gfp_mask in sa_query

Avoid bogus out of memory errors: fix sa_query to actually pass gfp_mask
supplied by the user to idr_pre_get.

Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
Acked-by: "Sean Hefty" <mshefty@ichips.intel.com>
Acked-by: "Roland Dreier" <rdreier@cisco.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Michael S. Tsirkin and committed by
Linus Torvalds
e322fedf adfaa888

+5 -5
+5 -5
drivers/infiniband/core/sa_query.c
··· 488 488 spin_unlock_irqrestore(&tid_lock, flags); 489 489 } 490 490 491 - static int send_mad(struct ib_sa_query *query, int timeout_ms) 491 + static int send_mad(struct ib_sa_query *query, int timeout_ms, gfp_t gfp_mask) 492 492 { 493 493 unsigned long flags; 494 494 int ret, id; 495 495 496 496 retry: 497 - if (!idr_pre_get(&query_idr, GFP_ATOMIC)) 497 + if (!idr_pre_get(&query_idr, gfp_mask)) 498 498 return -ENOMEM; 499 499 spin_lock_irqsave(&idr_lock, flags); 500 500 ret = idr_get_new(&query_idr, query, &id); ··· 630 630 631 631 *sa_query = &query->sa_query; 632 632 633 - ret = send_mad(&query->sa_query, timeout_ms); 633 + ret = send_mad(&query->sa_query, timeout_ms, gfp_mask); 634 634 if (ret < 0) 635 635 goto err2; 636 636 ··· 752 752 753 753 *sa_query = &query->sa_query; 754 754 755 - ret = send_mad(&query->sa_query, timeout_ms); 755 + ret = send_mad(&query->sa_query, timeout_ms, gfp_mask); 756 756 if (ret < 0) 757 757 goto err2; 758 758 ··· 844 844 845 845 *sa_query = &query->sa_query; 846 846 847 - ret = send_mad(&query->sa_query, timeout_ms); 847 + ret = send_mad(&query->sa_query, timeout_ms, gfp_mask); 848 848 if (ret < 0) 849 849 goto err2; 850 850