The osd_req_op_data() macro uses (and thus evaluates) two of its
parameters more than once.  This isn't guaranteed safe.  Define and
use some local variables to fix that.

Signed-off-by: Alex Elder <[email protected]>
---
 net/ceph/osd_client.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index 6539dfc..4602442 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -120,10 +120,13 @@ static void ceph_osd_data_bio_init(struct ceph_osd_data 
*osd_data,
 }
 #endif /* CONFIG_BLOCK */
 
-#define osd_req_op_data(oreq, whch, typ, fld)  \
-       ({                                              \
-               BUG_ON(whch >= (oreq)->r_num_ops);      \
-               &(oreq)->r_ops[whch].typ.fld;           \
+#define osd_req_op_data(oreq, whch, typ, fld)                          \
+       ({                                                              \
+               struct ceph_osd_request *__oreq = (oreq);               \
+               unsigned int __whch = (whch);                           \
+                                                                       \
+               BUG_ON(__whch >= __oreq->r_num_ops);                    \
+               &__oreq->r_ops[__whch].typ.fld;                         \
        })
 
 static struct ceph_osd_data *
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to