[rds-devel] [PATCH net-next] RDS: deliver zerocopy completion notification with data as an optimization

Dan Carpenter dan.carpenter at oracle.com
Sun Feb 25 23:25:34 PST 2018


Hi Sowmini,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Sowmini-Varadhan/RDS-deliver-zerocopy-completion-notification-with-data-as-an-optimization/20180222-194616

smatch warnings:
net/rds/recv.c:605 rds_recvmsg_zcookie() warn: variable dereferenced before check 'skb' (see line 596)

# https://github.com/0day-ci/linux/commit/da572c0179e420b5ca9939492e9b26c5fc57763a
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout da572c0179e420b5ca9939492e9b26c5fc57763a
vim +/skb +605 net/rds/recv.c

bdbe6fbc Andy Grover      2009-02-24  579  
da572c01 Sowmini Varadhan 2018-02-21  580  static int rds_recvmsg_zcookie(struct rds_sock *rs, struct msghdr *msg)
da572c01 Sowmini Varadhan 2018-02-21  581  {
da572c01 Sowmini Varadhan 2018-02-21  582  	struct sk_buff *skb, *tmp;
da572c01 Sowmini Varadhan 2018-02-21  583  	struct sock_exterr_skb *serr;
da572c01 Sowmini Varadhan 2018-02-21  584  	struct sock *sk = rds_rs_to_sk(rs);
da572c01 Sowmini Varadhan 2018-02-21  585  	struct sk_buff_head *q = &sk->sk_error_queue;
da572c01 Sowmini Varadhan 2018-02-21  586  	struct rds_zcopy_cookies done;
da572c01 Sowmini Varadhan 2018-02-21  587  	u32 *ptr;
da572c01 Sowmini Varadhan 2018-02-21  588  	int i;
da572c01 Sowmini Varadhan 2018-02-21  589  	unsigned long flags;
da572c01 Sowmini Varadhan 2018-02-21  590  
da572c01 Sowmini Varadhan 2018-02-21  591  	spin_lock_irqsave(&q->lock, flags);
da572c01 Sowmini Varadhan 2018-02-21  592  	if (skb_queue_empty(q)) {
da572c01 Sowmini Varadhan 2018-02-21  593  		spin_unlock_irqrestore(&q->lock, flags);
da572c01 Sowmini Varadhan 2018-02-21  594  		return 0;
da572c01 Sowmini Varadhan 2018-02-21  595  	}
da572c01 Sowmini Varadhan 2018-02-21 @596  	skb_queue_walk_safe(q, skb, tmp) {
da572c01 Sowmini Varadhan 2018-02-21  597  		serr = SKB_EXT_ERR(skb);
da572c01 Sowmini Varadhan 2018-02-21  598  		if (serr->ee.ee_origin == SO_EE_ORIGIN_ZCOOKIE) {
da572c01 Sowmini Varadhan 2018-02-21  599  			__skb_unlink(skb, q);
da572c01 Sowmini Varadhan 2018-02-21  600  			break;
da572c01 Sowmini Varadhan 2018-02-21  601  		}
da572c01 Sowmini Varadhan 2018-02-21  602  	}
da572c01 Sowmini Varadhan 2018-02-21  603  	spin_unlock_irqrestore(&q->lock, flags);
da572c01 Sowmini Varadhan 2018-02-21  604  
da572c01 Sowmini Varadhan 2018-02-21 @605  	if (!skb)
da572c01 Sowmini Varadhan 2018-02-21  606  		return 0;
da572c01 Sowmini Varadhan 2018-02-21  607  	memset(&done, 0, sizeof(done));
da572c01 Sowmini Varadhan 2018-02-21  608  	done.num = serr->ee.ee_data;
da572c01 Sowmini Varadhan 2018-02-21  609  	ptr = (u32 *)skb->data;
da572c01 Sowmini Varadhan 2018-02-21  610  	for (i = 0; i < done.num; i++)
da572c01 Sowmini Varadhan 2018-02-21  611  		done.cookies[i] = *ptr++;
da572c01 Sowmini Varadhan 2018-02-21  612  	put_cmsg(msg, SOL_RDS, RDS_CMSG_ZCOPY_COMPLETION, sizeof(done), &done);
da572c01 Sowmini Varadhan 2018-02-21  613  	consume_skb(skb);
da572c01 Sowmini Varadhan 2018-02-21  614  	return done.num;
da572c01 Sowmini Varadhan 2018-02-21  615  }
da572c01 Sowmini Varadhan 2018-02-21  616  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation



More information about the rds-devel mailing list