From: kernel test robot <lkp@intel.com>
To: "Christoph Böhmwalder " <christoph.boehmwalder@linbit.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [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.
Date: Wed, 18 Mar 2026 21:48:17 +0800 [thread overview]
Message-ID: <202603182114.P8QZLBd3-lkp@intel.com> (raw)
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
reply other threads:[~2026-03-18 13:49 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202603182114.P8QZLBd3-lkp@intel.com \
--to=lkp@intel.com \
--cc=christoph.boehmwalder@linbit.com \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.