All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 5796/6828] drivers/block/drbd/drbd_transport_rdma.c:1954:5-24: WARNING: atomic_dec_and_test variation before object free at line 1963.
@ 2026-03-18 13:48 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-03-18 13:48 UTC (permalink / raw)
  To: Christoph Böhmwalder ; +Cc: oe-kbuild-all

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   8e5a478b6d6a5bb0a3d52147862b15e4d826af19
commit: 314794b19fb4b08aba87ff06d650a1d38c86c094 [5796/6828] drbd: remove BROKEN for DRBD
config: arc-randconfig-r062-20260318 (https://download.01.org/0day-ci/archive/20260318/202603182114.P8QZLBd3-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 8.5.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603182114.P8QZLBd3-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/block/drbd/drbd_transport_rdma.c:1954:5-24: WARNING: atomic_dec_and_test variation before object free at line 1963.
--
>> drivers/block/drbd/drbd_transport_rdma.c:560:15-22: WARNING opportunity for kmemdup

vim +1954 drivers/block/drbd/drbd_transport_rdma.c

038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1902  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1903  static int dtr_handle_tx_cq_event(struct ib_cq *cq, struct dtr_cm *cm)
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1904  {
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1905  	struct dtr_path *path = cm->path;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1906  	struct dtr_transport *rdma_transport =
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1907  		container_of(path->path.transport, struct dtr_transport, transport);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1908  	struct dtr_tx_desc *tx_desc;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1909  	struct ib_wc wc;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1910  	enum dtr_stream_nr stream_nr;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1911  	int ret, err;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1912  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1913  	ret = ib_poll_cq(cq, 1, &wc);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1914  	if (!ret)
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1915  		return -EAGAIN;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1916  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1917  	tx_desc = (struct dtr_tx_desc *) (unsigned long) wc.wr_id;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1918  	stream_nr = tx_desc->imm.stream;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1919  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1920  	if (wc.status != IB_WC_SUCCESS || wc.opcode != IB_WC_SEND) {
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1921  		struct drbd_transport *transport = &rdma_transport->transport;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1922  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1923  		if (wc.status == IB_WC_RNR_RETRY_EXC_ERR) {
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1924  			struct dtr_flow *flow = &path->flow[stream_nr];
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1925  			tr_err(transport, "tx_event: wc.status = IB_WC_RNR_RETRY_EXC_ERR\n");
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1926  			tr_info(transport, "peer_rx_descs = %d", atomic_read(&flow->peer_rx_descs));
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1927  		} else if (wc.status != IB_WC_WR_FLUSH_ERR) {
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1928  			tr_err(transport, "tx_event: wc.status != IB_WC_SUCCESS %d\n", wc.status);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1929  			tr_err(transport, "wc.vendor_err = %d, wc.byte_len = %d wc.imm_data = %d\n",
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1930  			       wc.vendor_err, wc.byte_len, wc.ex.imm_data);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1931  		}
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1932  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1933  		set_bit(DSB_ERROR, &cm->state);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1934  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1935  		if (stream_nr != ST_FLOW_CTRL) {
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1936  			err = dtr_repost_tx_desc(cm, tx_desc);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1937  			if (!err)
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1938  				tx_desc = NULL; /* it is in the air again! Fly! */
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1939  			else if (__ratelimit(&rdma_transport->rate_limit))
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1940  				tr_warn(transport, "repost of tx_desc failed! %d\n", err);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1941  		}
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1942  	}
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1943  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1944  	if (stream_nr != ST_FLOW_CTRL) {
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1945  		struct dtr_flow *flow = &path->flow[stream_nr];
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1946  		struct dtr_stream *rdma_stream = &rdma_transport->stream[stream_nr];
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1947  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1948  		atomic_dec(&flow->tx_descs_posted);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1949  		wake_up_interruptible(&rdma_stream->send_wq);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1950  	}
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1951  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1952  	if (tx_desc)
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1953  		dtr_free_tx_desc(cm, tx_desc);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16 @1954  	if (atomic_dec_and_test(&cm->tx_descs_posted)) {
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1955  		bool was_active = timer_delete(&cm->tx_timeout);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1956  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1957  		if (was_active)
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1958  			kref_put(&cm->kref, dtr_destroy_cm);
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1959  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1960  		if (cm->state == DSM_CONNECTED)
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1961  			kref_put(&cm->kref, dtr_destroy_cm); /* this is _not_ the last ref */
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1962  		else
038cb6e644e48cc Christoph Böhmwalder 2025-12-16 @1963  			schedule_work(&cm->end_tx_work); /* the last ref might be put in this work */
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1964  	}
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1965  
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1966  	return 0;
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1967  }
038cb6e644e48cc Christoph Böhmwalder 2025-12-16  1968  

:::::: The code at line 1954 was first introduced by commit
:::::: 038cb6e644e48cc59ef59ba9a378d318a1f27d3f drbd: add RDMA transport implementation

:::::: TO: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
:::::: CC: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-03-18 13:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-18 13:48 [linux-next:master 5796/6828] drivers/block/drbd/drbd_transport_rdma.c:1954:5-24: WARNING: atomic_dec_and_test variation before object free at line 1963 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.