[PATCH] IB/core: use correct gfp_mask in sa_query
authorMichael S. Tsirkin <mst@mellanox.co.il>
Fri, 14 Jul 2006 07:23:56 +0000 (00:23 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sat, 15 Jul 2006 04:53:51 +0000 (21:53 -0700)
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>
drivers/infiniband/core/sa_query.c

index e911c99ff8437987d0e12535a8f80bda02e8327f..aeda484ffd820605b54602aff002268bcc8be63d 100644 (file)
@@ -488,13 +488,13 @@ static void init_mad(struct ib_sa_mad *mad, struct ib_mad_agent *agent)
        spin_unlock_irqrestore(&tid_lock, flags);
 }
 
-static int send_mad(struct ib_sa_query *query, int timeout_ms)
+static int send_mad(struct ib_sa_query *query, int timeout_ms, gfp_t gfp_mask)
 {
        unsigned long flags;
        int ret, id;
 
 retry:
-       if (!idr_pre_get(&query_idr, GFP_ATOMIC))
+       if (!idr_pre_get(&query_idr, gfp_mask))
                return -ENOMEM;
        spin_lock_irqsave(&idr_lock, flags);
        ret = idr_get_new(&query_idr, query, &id);
@@ -630,7 +630,7 @@ int ib_sa_path_rec_get(struct ib_device *device, u8 port_num,
 
        *sa_query = &query->sa_query;
 
-       ret = send_mad(&query->sa_query, timeout_ms);
+       ret = send_mad(&query->sa_query, timeout_ms, gfp_mask);
        if (ret < 0)
                goto err2;
 
@@ -752,7 +752,7 @@ int ib_sa_service_rec_query(struct ib_device *device, u8 port_num, u8 method,
 
        *sa_query = &query->sa_query;
 
-       ret = send_mad(&query->sa_query, timeout_ms);
+       ret = send_mad(&query->sa_query, timeout_ms, gfp_mask);
        if (ret < 0)
                goto err2;
 
@@ -844,7 +844,7 @@ int ib_sa_mcmember_rec_query(struct ib_device *device, u8 port_num,
 
        *sa_query = &query->sa_query;
 
-       ret = send_mad(&query->sa_query, timeout_ms);
+       ret = send_mad(&query->sa_query, timeout_ms, gfp_mask);
        if (ret < 0)
                goto err2;