diff options
Diffstat (limited to 'net/rds/message.c')
| -rw-r--r-- | net/rds/message.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/rds/message.c b/net/rds/message.c index a84545dae370..848cff45183b 100644 --- a/net/rds/message.c +++ b/net/rds/message.c | |||
| @@ -224,6 +224,9 @@ struct scatterlist *rds_message_alloc_sgs(struct rds_message *rm, int nents) | |||
| 224 | WARN_ON(rm->m_used_sgs + nents > rm->m_total_sgs); | 224 | WARN_ON(rm->m_used_sgs + nents > rm->m_total_sgs); |
| 225 | WARN_ON(!nents); | 225 | WARN_ON(!nents); |
| 226 | 226 | ||
| 227 | if (rm->m_used_sgs + nents > rm->m_total_sgs) | ||
| 228 | return NULL; | ||
| 229 | |||
| 227 | sg_ret = &sg_first[rm->m_used_sgs]; | 230 | sg_ret = &sg_first[rm->m_used_sgs]; |
| 228 | sg_init_table(sg_ret, nents); | 231 | sg_init_table(sg_ret, nents); |
| 229 | rm->m_used_sgs += nents; | 232 | rm->m_used_sgs += nents; |
| @@ -246,6 +249,8 @@ struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned in | |||
| 246 | rm->m_inc.i_hdr.h_len = cpu_to_be32(total_len); | 249 | rm->m_inc.i_hdr.h_len = cpu_to_be32(total_len); |
| 247 | rm->data.op_nents = ceil(total_len, PAGE_SIZE); | 250 | rm->data.op_nents = ceil(total_len, PAGE_SIZE); |
| 248 | rm->data.op_sg = rds_message_alloc_sgs(rm, num_sgs); | 251 | rm->data.op_sg = rds_message_alloc_sgs(rm, num_sgs); |
| 252 | if (!rm->data.op_sg) | ||
| 253 | return ERR_PTR(-ENOMEM); | ||
| 249 | 254 | ||
| 250 | for (i = 0; i < rm->data.op_nents; ++i) { | 255 | for (i = 0; i < rm->data.op_nents; ++i) { |
| 251 | sg_set_page(&rm->data.op_sg[i], | 256 | sg_set_page(&rm->data.op_sg[i], |
