* drivers/infiniband/sw/siw/siw_cm.c:1898 siw_create_listen() error: double unlocked 'cep->lock' (orig line 1888)
@ 2020-06-13 19:25 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2020-06-13 19:25 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 13654 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Bernard Metzler <bmt@zurich.ibm.com>
CC: Jason Gunthorpe <jgg@mellanox.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 08bf1a27c4c354b853fd81a79e953525bbcc8506
commit: 33fb27fd54465c74cbffba6315b2f043e90cec4c RDMA/siw: Fix passive connection establishment
date: 3 months ago
:::::: branch date: 89 minutes ago
:::::: commit date: 3 months ago
config: x86_64-randconfig-m001-20200614 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/infiniband/sw/siw/siw_cm.c:1898 siw_create_listen() error: double unlocked 'cep->lock' (orig line 1888)
Old smatch warnings:
drivers/infiniband/sw/siw/siw_cm.c:435 siw_qp_cm_drop() error: double unlocked 'cep->lock' (orig line 385)
drivers/infiniband/sw/siw/siw_cm.c:979 siw_accept_newconn() error: double unlocked 'new_cep->lock' (orig line 977)
drivers/infiniband/sw/siw/siw_cm.c:997 siw_accept_newconn() error: we previously assumed 'new_cep' could be null (see line 991)
drivers/infiniband/sw/siw/siw_cm.c:1033 siw_cm_work_handler() error: double unlocked 'cep->listen_cep->lock' (orig line 1025)
drivers/infiniband/sw/siw/siw_cm.c:1162 siw_cm_work_handler() error: double unlocked 'cep->lock' (orig line 1015)
drivers/infiniband/sw/siw/siw_cm.c:1167 siw_cm_work_handler() error: double unlocked 'cep->lock' (orig line 1162)
drivers/infiniband/sw/siw/siw_cm.c:1182 siw_cm_work_handler() error: double unlocked 'cep->lock' (orig line 1015)
drivers/infiniband/sw/siw/siw_cm.c:1496 siw_connect() error: double unlocked 'cep->lock' (orig line 1407)
drivers/infiniband/sw/siw/siw_cm.c:1519 siw_connect() error: double unlocked 'cep->lock' (orig line 1407)
drivers/infiniband/sw/siw/siw_cm.c:1569 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1577 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1703 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1724 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1748 siw_reject() error: double unlocked 'cep->lock' (orig line 1740)
drivers/infiniband/sw/siw/siw_cm.c:1766 siw_reject() error: double unlocked 'cep->lock' (orig line 1740)
drivers/infiniband/sw/siw/siw_cm.c:1933 siw_drop_listeners() error: double unlocked 'cep->lock' (orig line 1921)
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=33fb27fd54465c74cbffba6315b2f043e90cec4c
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git remote update linus
git checkout 33fb27fd54465c74cbffba6315b2f043e90cec4c
vim +1898 drivers/infiniband/sw/siw/siw_cm.c
6c52fdc244b5cc Bernard Metzler 2019-06-20 1771
33fb27fd54465c Bernard Metzler 2020-02-28 1772 /*
33fb27fd54465c Bernard Metzler 2020-02-28 1773 * siw_create_listen - Create resources for a listener's IWCM ID @id
33fb27fd54465c Bernard Metzler 2020-02-28 1774 *
33fb27fd54465c Bernard Metzler 2020-02-28 1775 * Starts listen on the socket address id->local_addr.
33fb27fd54465c Bernard Metzler 2020-02-28 1776 *
33fb27fd54465c Bernard Metzler 2020-02-28 1777 */
33fb27fd54465c Bernard Metzler 2020-02-28 1778 int siw_create_listen(struct iw_cm_id *id, int backlog)
6c52fdc244b5cc Bernard Metzler 2019-06-20 1779 {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1780 struct socket *s;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1781 struct siw_cep *cep = NULL;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1782 struct siw_device *sdev = to_siw_dev(id->device);
33fb27fd54465c Bernard Metzler 2020-02-28 1783 int addr_family = id->local_addr.ss_family;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1784 int rv = 0, s_val;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1785
33fb27fd54465c Bernard Metzler 2020-02-28 1786 if (addr_family != AF_INET && addr_family != AF_INET6)
33fb27fd54465c Bernard Metzler 2020-02-28 1787 return -EAFNOSUPPORT;
33fb27fd54465c Bernard Metzler 2020-02-28 1788
6c52fdc244b5cc Bernard Metzler 2019-06-20 1789 rv = sock_create(addr_family, SOCK_STREAM, IPPROTO_TCP, &s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1790 if (rv < 0)
6c52fdc244b5cc Bernard Metzler 2019-06-20 1791 return rv;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1792
6c52fdc244b5cc Bernard Metzler 2019-06-20 1793 /*
6c52fdc244b5cc Bernard Metzler 2019-06-20 1794 * Allow binding local port when still in TIME_WAIT from last close.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1795 */
6c52fdc244b5cc Bernard Metzler 2019-06-20 1796 s_val = 1;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1797 rv = kernel_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&s_val,
6c52fdc244b5cc Bernard Metzler 2019-06-20 1798 sizeof(s_val));
6c52fdc244b5cc Bernard Metzler 2019-06-20 1799 if (rv) {
c536277e0db1ad Bernard Metzler 2019-08-22 1800 siw_dbg(id->device, "setsockopt error: %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1801 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1802 }
33fb27fd54465c Bernard Metzler 2020-02-28 1803 if (addr_family == AF_INET) {
33fb27fd54465c Bernard Metzler 2020-02-28 1804 struct sockaddr_in *laddr = &to_sockaddr_in(id->local_addr);
33fb27fd54465c Bernard Metzler 2020-02-28 1805
33fb27fd54465c Bernard Metzler 2020-02-28 1806 /* For wildcard addr, limit binding to current device only */
33fb27fd54465c Bernard Metzler 2020-02-28 1807 if (ipv4_is_zeronet(laddr->sin_addr.s_addr))
33fb27fd54465c Bernard Metzler 2020-02-28 1808 s->sk->sk_bound_dev_if = sdev->netdev->ifindex;
33fb27fd54465c Bernard Metzler 2020-02-28 1809
33fb27fd54465c Bernard Metzler 2020-02-28 1810 rv = s->ops->bind(s, (struct sockaddr *)laddr,
33fb27fd54465c Bernard Metzler 2020-02-28 1811 sizeof(struct sockaddr_in));
33fb27fd54465c Bernard Metzler 2020-02-28 1812 } else {
33fb27fd54465c Bernard Metzler 2020-02-28 1813 struct sockaddr_in6 *laddr = &to_sockaddr_in6(id->local_addr);
33fb27fd54465c Bernard Metzler 2020-02-28 1814
33fb27fd54465c Bernard Metzler 2020-02-28 1815 /* For wildcard addr, limit binding to current device only */
33fb27fd54465c Bernard Metzler 2020-02-28 1816 if (ipv6_addr_any(&laddr->sin6_addr))
33fb27fd54465c Bernard Metzler 2020-02-28 1817 s->sk->sk_bound_dev_if = sdev->netdev->ifindex;
33fb27fd54465c Bernard Metzler 2020-02-28 1818
33fb27fd54465c Bernard Metzler 2020-02-28 1819 rv = s->ops->bind(s, (struct sockaddr *)laddr,
6c52fdc244b5cc Bernard Metzler 2019-06-20 1820 sizeof(struct sockaddr_in6));
33fb27fd54465c Bernard Metzler 2020-02-28 1821 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1822 if (rv) {
c536277e0db1ad Bernard Metzler 2019-08-22 1823 siw_dbg(id->device, "socket bind error: %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1824 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1825 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1826 cep = siw_cep_alloc(sdev);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1827 if (!cep) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1828 rv = -ENOMEM;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1829 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1830 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1831 siw_cep_socket_assoc(cep, s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1832
6c52fdc244b5cc Bernard Metzler 2019-06-20 1833 rv = siw_cm_alloc_work(cep, backlog);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1834 if (rv) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1835 siw_dbg(id->device,
c536277e0db1ad Bernard Metzler 2019-08-22 1836 "alloc_work error %d, backlog %d\n",
6c52fdc244b5cc Bernard Metzler 2019-06-20 1837 rv, backlog);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1838 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1839 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1840 rv = s->ops->listen(s, backlog);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1841 if (rv) {
c536277e0db1ad Bernard Metzler 2019-08-22 1842 siw_dbg(id->device, "listen error %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1843 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1844 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1845 cep->cm_id = id;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1846 id->add_ref(id);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1847
6c52fdc244b5cc Bernard Metzler 2019-06-20 1848 /*
6c52fdc244b5cc Bernard Metzler 2019-06-20 1849 * In case of a wildcard rdma_listen on a multi-homed device,
6c52fdc244b5cc Bernard Metzler 2019-06-20 1850 * a listener's IWCM id is associated with more than one listening CEP.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1851 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1852 * We currently use id->provider_data in three different ways:
6c52fdc244b5cc Bernard Metzler 2019-06-20 1853 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1854 * o For a listener's IWCM id, id->provider_data points to
6c52fdc244b5cc Bernard Metzler 2019-06-20 1855 * the list_head of the list of listening CEPs.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1856 * Uses: siw_create_listen(), siw_destroy_listen()
6c52fdc244b5cc Bernard Metzler 2019-06-20 1857 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1858 * o For each accepted passive-side IWCM id, id->provider_data
6c52fdc244b5cc Bernard Metzler 2019-06-20 1859 * points to the CEP itself. This is a consequence of
6c52fdc244b5cc Bernard Metzler 2019-06-20 1860 * - siw_cm_upcall() setting event.provider_data = cep and
6c52fdc244b5cc Bernard Metzler 2019-06-20 1861 * - the IWCM's cm_conn_req_handler() setting provider_data of the
6c52fdc244b5cc Bernard Metzler 2019-06-20 1862 * new passive-side IWCM id equal to event.provider_data
6c52fdc244b5cc Bernard Metzler 2019-06-20 1863 * Uses: siw_accept(), siw_reject()
6c52fdc244b5cc Bernard Metzler 2019-06-20 1864 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1865 * o For an active-side IWCM id, id->provider_data is not used at all.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1866 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1867 */
6c52fdc244b5cc Bernard Metzler 2019-06-20 1868 if (!id->provider_data) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1869 id->provider_data =
6c52fdc244b5cc Bernard Metzler 2019-06-20 1870 kmalloc(sizeof(struct list_head), GFP_KERNEL);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1871 if (!id->provider_data) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1872 rv = -ENOMEM;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1873 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1874 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1875 INIT_LIST_HEAD((struct list_head *)id->provider_data);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1876 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1877 list_add_tail(&cep->listenq, (struct list_head *)id->provider_data);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1878 cep->state = SIW_EPSTATE_LISTENING;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1879
33fb27fd54465c Bernard Metzler 2020-02-28 1880 siw_dbg(id->device, "Listen at laddr %pISp\n", &id->local_addr);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1881
6c52fdc244b5cc Bernard Metzler 2019-06-20 1882 return 0;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1883
6c52fdc244b5cc Bernard Metzler 2019-06-20 1884 error:
6c52fdc244b5cc Bernard Metzler 2019-06-20 1885 siw_dbg(id->device, "failed: %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1886
6c52fdc244b5cc Bernard Metzler 2019-06-20 1887 if (cep) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 @1888 siw_cep_set_inuse(cep);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1889
6c52fdc244b5cc Bernard Metzler 2019-06-20 1890 if (cep->cm_id) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1891 cep->cm_id->rem_ref(cep->cm_id);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1892 cep->cm_id = NULL;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1893 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1894 cep->sock = NULL;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1895 siw_socket_disassoc(s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1896 cep->state = SIW_EPSTATE_CLOSED;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1897
6c52fdc244b5cc Bernard Metzler 2019-06-20 @1898 siw_cep_set_free(cep);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1899 siw_cep_put(cep);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1900 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1901 sock_release(s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1902
6c52fdc244b5cc Bernard Metzler 2019-06-20 1903 return rv;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1904 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1905
:::::: The code at line 1898 was first introduced by commit
:::::: 6c52fdc244b5ccc468006fd65a504d4ee33743c7 rdma/siw: connection management
:::::: TO: Bernard Metzler <bmt@zurich.ibm.com>
:::::: CC: Jason Gunthorpe <jgg@mellanox.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30899 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* drivers/infiniband/sw/siw/siw_cm.c:1898 siw_create_listen() error: double unlocked 'cep->lock' (orig line 1888)
@ 2020-07-10 19:18 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2020-07-10 19:18 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 13651 bytes --]
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Bernard Metzler <bmt@zurich.ibm.com>
CC: Jason Gunthorpe <jgg@mellanox.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 42f82040ee66db13525dc6f14b8559890b2f4c1c
commit: 33fb27fd54465c74cbffba6315b2f043e90cec4c RDMA/siw: Fix passive connection establishment
date: 4 months ago
:::::: branch date: 18 hours ago
:::::: commit date: 4 months ago
config: riscv-randconfig-m031-20200710 (attached as .config)
compiler: riscv64-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/infiniband/sw/siw/siw_cm.c:1898 siw_create_listen() error: double unlocked 'cep->lock' (orig line 1888)
Old smatch warnings:
drivers/infiniband/sw/siw/siw_cm.c:435 siw_qp_cm_drop() error: double unlocked 'cep->lock' (orig line 385)
drivers/infiniband/sw/siw/siw_cm.c:979 siw_accept_newconn() error: double unlocked 'new_cep->lock' (orig line 977)
drivers/infiniband/sw/siw/siw_cm.c:997 siw_accept_newconn() error: we previously assumed 'new_cep' could be null (see line 991)
drivers/infiniband/sw/siw/siw_cm.c:1033 siw_cm_work_handler() error: double unlocked 'cep->listen_cep->lock' (orig line 1025)
drivers/infiniband/sw/siw/siw_cm.c:1162 siw_cm_work_handler() error: double unlocked 'cep->lock' (orig line 1015)
drivers/infiniband/sw/siw/siw_cm.c:1167 siw_cm_work_handler() error: double unlocked 'cep->lock' (orig line 1162)
drivers/infiniband/sw/siw/siw_cm.c:1182 siw_cm_work_handler() error: double unlocked 'cep->lock' (orig line 1015)
drivers/infiniband/sw/siw/siw_cm.c:1496 siw_connect() error: double unlocked 'cep->lock' (orig line 1407)
drivers/infiniband/sw/siw/siw_cm.c:1519 siw_connect() error: double unlocked 'cep->lock' (orig line 1407)
drivers/infiniband/sw/siw/siw_cm.c:1569 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1577 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1703 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1724 siw_accept() error: double unlocked 'cep->lock' (orig line 1555)
drivers/infiniband/sw/siw/siw_cm.c:1748 siw_reject() error: double unlocked 'cep->lock' (orig line 1740)
drivers/infiniband/sw/siw/siw_cm.c:1766 siw_reject() error: double unlocked 'cep->lock' (orig line 1740)
drivers/infiniband/sw/siw/siw_cm.c:1933 siw_drop_listeners() error: double unlocked 'cep->lock' (orig line 1921)
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=33fb27fd54465c74cbffba6315b2f043e90cec4c
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git remote update linus
git checkout 33fb27fd54465c74cbffba6315b2f043e90cec4c
vim +1898 drivers/infiniband/sw/siw/siw_cm.c
6c52fdc244b5cc Bernard Metzler 2019-06-20 1771
33fb27fd54465c Bernard Metzler 2020-02-28 1772 /*
33fb27fd54465c Bernard Metzler 2020-02-28 1773 * siw_create_listen - Create resources for a listener's IWCM ID @id
33fb27fd54465c Bernard Metzler 2020-02-28 1774 *
33fb27fd54465c Bernard Metzler 2020-02-28 1775 * Starts listen on the socket address id->local_addr.
33fb27fd54465c Bernard Metzler 2020-02-28 1776 *
33fb27fd54465c Bernard Metzler 2020-02-28 1777 */
33fb27fd54465c Bernard Metzler 2020-02-28 1778 int siw_create_listen(struct iw_cm_id *id, int backlog)
6c52fdc244b5cc Bernard Metzler 2019-06-20 1779 {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1780 struct socket *s;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1781 struct siw_cep *cep = NULL;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1782 struct siw_device *sdev = to_siw_dev(id->device);
33fb27fd54465c Bernard Metzler 2020-02-28 1783 int addr_family = id->local_addr.ss_family;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1784 int rv = 0, s_val;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1785
33fb27fd54465c Bernard Metzler 2020-02-28 1786 if (addr_family != AF_INET && addr_family != AF_INET6)
33fb27fd54465c Bernard Metzler 2020-02-28 1787 return -EAFNOSUPPORT;
33fb27fd54465c Bernard Metzler 2020-02-28 1788
6c52fdc244b5cc Bernard Metzler 2019-06-20 1789 rv = sock_create(addr_family, SOCK_STREAM, IPPROTO_TCP, &s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1790 if (rv < 0)
6c52fdc244b5cc Bernard Metzler 2019-06-20 1791 return rv;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1792
6c52fdc244b5cc Bernard Metzler 2019-06-20 1793 /*
6c52fdc244b5cc Bernard Metzler 2019-06-20 1794 * Allow binding local port when still in TIME_WAIT from last close.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1795 */
6c52fdc244b5cc Bernard Metzler 2019-06-20 1796 s_val = 1;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1797 rv = kernel_setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *)&s_val,
6c52fdc244b5cc Bernard Metzler 2019-06-20 1798 sizeof(s_val));
6c52fdc244b5cc Bernard Metzler 2019-06-20 1799 if (rv) {
c536277e0db1ad Bernard Metzler 2019-08-22 1800 siw_dbg(id->device, "setsockopt error: %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1801 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1802 }
33fb27fd54465c Bernard Metzler 2020-02-28 1803 if (addr_family == AF_INET) {
33fb27fd54465c Bernard Metzler 2020-02-28 1804 struct sockaddr_in *laddr = &to_sockaddr_in(id->local_addr);
33fb27fd54465c Bernard Metzler 2020-02-28 1805
33fb27fd54465c Bernard Metzler 2020-02-28 1806 /* For wildcard addr, limit binding to current device only */
33fb27fd54465c Bernard Metzler 2020-02-28 1807 if (ipv4_is_zeronet(laddr->sin_addr.s_addr))
33fb27fd54465c Bernard Metzler 2020-02-28 1808 s->sk->sk_bound_dev_if = sdev->netdev->ifindex;
33fb27fd54465c Bernard Metzler 2020-02-28 1809
33fb27fd54465c Bernard Metzler 2020-02-28 1810 rv = s->ops->bind(s, (struct sockaddr *)laddr,
33fb27fd54465c Bernard Metzler 2020-02-28 1811 sizeof(struct sockaddr_in));
33fb27fd54465c Bernard Metzler 2020-02-28 1812 } else {
33fb27fd54465c Bernard Metzler 2020-02-28 1813 struct sockaddr_in6 *laddr = &to_sockaddr_in6(id->local_addr);
33fb27fd54465c Bernard Metzler 2020-02-28 1814
33fb27fd54465c Bernard Metzler 2020-02-28 1815 /* For wildcard addr, limit binding to current device only */
33fb27fd54465c Bernard Metzler 2020-02-28 1816 if (ipv6_addr_any(&laddr->sin6_addr))
33fb27fd54465c Bernard Metzler 2020-02-28 1817 s->sk->sk_bound_dev_if = sdev->netdev->ifindex;
33fb27fd54465c Bernard Metzler 2020-02-28 1818
33fb27fd54465c Bernard Metzler 2020-02-28 1819 rv = s->ops->bind(s, (struct sockaddr *)laddr,
6c52fdc244b5cc Bernard Metzler 2019-06-20 1820 sizeof(struct sockaddr_in6));
33fb27fd54465c Bernard Metzler 2020-02-28 1821 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1822 if (rv) {
c536277e0db1ad Bernard Metzler 2019-08-22 1823 siw_dbg(id->device, "socket bind error: %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1824 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1825 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1826 cep = siw_cep_alloc(sdev);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1827 if (!cep) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1828 rv = -ENOMEM;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1829 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1830 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1831 siw_cep_socket_assoc(cep, s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1832
6c52fdc244b5cc Bernard Metzler 2019-06-20 1833 rv = siw_cm_alloc_work(cep, backlog);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1834 if (rv) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1835 siw_dbg(id->device,
c536277e0db1ad Bernard Metzler 2019-08-22 1836 "alloc_work error %d, backlog %d\n",
6c52fdc244b5cc Bernard Metzler 2019-06-20 1837 rv, backlog);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1838 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1839 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1840 rv = s->ops->listen(s, backlog);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1841 if (rv) {
c536277e0db1ad Bernard Metzler 2019-08-22 1842 siw_dbg(id->device, "listen error %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1843 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1844 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1845 cep->cm_id = id;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1846 id->add_ref(id);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1847
6c52fdc244b5cc Bernard Metzler 2019-06-20 1848 /*
6c52fdc244b5cc Bernard Metzler 2019-06-20 1849 * In case of a wildcard rdma_listen on a multi-homed device,
6c52fdc244b5cc Bernard Metzler 2019-06-20 1850 * a listener's IWCM id is associated with more than one listening CEP.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1851 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1852 * We currently use id->provider_data in three different ways:
6c52fdc244b5cc Bernard Metzler 2019-06-20 1853 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1854 * o For a listener's IWCM id, id->provider_data points to
6c52fdc244b5cc Bernard Metzler 2019-06-20 1855 * the list_head of the list of listening CEPs.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1856 * Uses: siw_create_listen(), siw_destroy_listen()
6c52fdc244b5cc Bernard Metzler 2019-06-20 1857 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1858 * o For each accepted passive-side IWCM id, id->provider_data
6c52fdc244b5cc Bernard Metzler 2019-06-20 1859 * points to the CEP itself. This is a consequence of
6c52fdc244b5cc Bernard Metzler 2019-06-20 1860 * - siw_cm_upcall() setting event.provider_data = cep and
6c52fdc244b5cc Bernard Metzler 2019-06-20 1861 * - the IWCM's cm_conn_req_handler() setting provider_data of the
6c52fdc244b5cc Bernard Metzler 2019-06-20 1862 * new passive-side IWCM id equal to event.provider_data
6c52fdc244b5cc Bernard Metzler 2019-06-20 1863 * Uses: siw_accept(), siw_reject()
6c52fdc244b5cc Bernard Metzler 2019-06-20 1864 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1865 * o For an active-side IWCM id, id->provider_data is not used at all.
6c52fdc244b5cc Bernard Metzler 2019-06-20 1866 *
6c52fdc244b5cc Bernard Metzler 2019-06-20 1867 */
6c52fdc244b5cc Bernard Metzler 2019-06-20 1868 if (!id->provider_data) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1869 id->provider_data =
6c52fdc244b5cc Bernard Metzler 2019-06-20 1870 kmalloc(sizeof(struct list_head), GFP_KERNEL);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1871 if (!id->provider_data) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1872 rv = -ENOMEM;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1873 goto error;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1874 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1875 INIT_LIST_HEAD((struct list_head *)id->provider_data);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1876 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1877 list_add_tail(&cep->listenq, (struct list_head *)id->provider_data);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1878 cep->state = SIW_EPSTATE_LISTENING;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1879
33fb27fd54465c Bernard Metzler 2020-02-28 1880 siw_dbg(id->device, "Listen at laddr %pISp\n", &id->local_addr);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1881
6c52fdc244b5cc Bernard Metzler 2019-06-20 1882 return 0;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1883
6c52fdc244b5cc Bernard Metzler 2019-06-20 1884 error:
6c52fdc244b5cc Bernard Metzler 2019-06-20 1885 siw_dbg(id->device, "failed: %d\n", rv);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1886
6c52fdc244b5cc Bernard Metzler 2019-06-20 1887 if (cep) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 @1888 siw_cep_set_inuse(cep);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1889
6c52fdc244b5cc Bernard Metzler 2019-06-20 1890 if (cep->cm_id) {
6c52fdc244b5cc Bernard Metzler 2019-06-20 1891 cep->cm_id->rem_ref(cep->cm_id);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1892 cep->cm_id = NULL;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1893 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1894 cep->sock = NULL;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1895 siw_socket_disassoc(s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1896 cep->state = SIW_EPSTATE_CLOSED;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1897
6c52fdc244b5cc Bernard Metzler 2019-06-20 @1898 siw_cep_set_free(cep);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1899 siw_cep_put(cep);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1900 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1901 sock_release(s);
6c52fdc244b5cc Bernard Metzler 2019-06-20 1902
6c52fdc244b5cc Bernard Metzler 2019-06-20 1903 return rv;
6c52fdc244b5cc Bernard Metzler 2019-06-20 1904 }
6c52fdc244b5cc Bernard Metzler 2019-06-20 1905
:::::: The code at line 1898 was first introduced by commit
:::::: 6c52fdc244b5ccc468006fd65a504d4ee33743c7 rdma/siw: connection management
:::::: TO: Bernard Metzler <bmt@zurich.ibm.com>
:::::: CC: Jason Gunthorpe <jgg@mellanox.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32737 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-07-10 19:18 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-13 19:25 drivers/infiniband/sw/siw/siw_cm.c:1898 siw_create_listen() error: double unlocked 'cep->lock' (orig line 1888) kernel test robot
2020-07-10 19:18 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.