CC: [email protected] CC: [email protected] CC: [email protected] TO: Mark Rutland <[email protected]> CC: Peter Zijlstra <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: f4bc5bbb5fef3cf421ba3485d6d383c27ec473ed commit: fc63a6e08a8c97a3dc3a6f2e1946b949b9a6c2d3 locking/atomic: arm: move to ARCH_ATOMIC date: 9 months ago :::::: branch date: 14 hours ago :::::: commit date: 9 months ago config: arm-randconfig-c002-20220205 (https://download.01.org/0day-ci/archive/20220210/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 78c6b90000292eb37aac5dead6ab26611cd76f42) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fc63a6e08a8c97a3dc3a6f2e1946b949b9a6c2d3 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout fc63a6e08a8c97a3dc3a6f2e1946b949b9a6c2d3 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) 8 warnings generated. Suppressed 8 warnings (2 in non-user code, 6 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (2 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (2 in non-user code, 6 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (2 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (2 in non-user code, 6 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (2 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (2 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (2 in non-user code, 6 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (2 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (2 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. net/bridge/br_netlink.c:590:3: warning: Value stored to 'br' is never read [clang-analyzer-deadcode.DeadStores] br = port->br; ^ ~~~~~~~~ net/bridge/br_netlink.c:590:3: note: Value stored to 'br' is never read br = port->br; ^ ~~~~~~~~ net/bridge/br_netlink.c:591:3: warning: Value stored to 'port_no' is never read [clang-analyzer-deadcode.DeadStores] port_no = port->port_no; ^ ~~~~~~~~~~~~~ net/bridge/br_netlink.c:591:3: note: Value stored to 'port_no' is never read port_no = port->port_no; ^ ~~~~~~~~~~~~~ net/bridge/br_netlink.c:1647:3: warning: Value stored to 'br' is never read [clang-analyzer-deadcode.DeadStores] br = p->br; ^ ~~~~~ net/bridge/br_netlink.c:1647:3: note: Value stored to 'br' is never read br = p->br; ^ ~~~~~ Suppressed 3 warnings (2 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (3 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. drivers/block/drbd/drbd_main.c:751:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(p->verify_alg, nc->verify_alg); ^~~~~~ drivers/block/drbd/drbd_main.c:751:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(p->verify_alg, nc->verify_alg); ^~~~~~ drivers/block/drbd/drbd_main.c:753:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(p->csums_alg, nc->csums_alg); ^~~~~~ drivers/block/drbd/drbd_main.c:753:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(p->csums_alg, nc->csums_alg); ^~~~~~ drivers/block/drbd/drbd_main.c:797:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(p->integrity_alg, nc->integrity_alg); ^~~~~~ drivers/block/drbd/drbd_main.c:797:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(p->integrity_alg, nc->integrity_alg); ^~~~~~ drivers/block/drbd/drbd_main.c:1095:37: warning: The result of the left shift is undefined because the left operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult] p->encoding = (p->encoding & (~0x7 << 4)) | (n << 4); ~~~~ ^ drivers/block/drbd/drbd_main.c:1094:2: note: Assuming the condition is true BUG_ON(n & ~0x7); ^ include/asm-generic/bug.h:63:36: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:78:40: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^~~~ drivers/block/drbd/drbd_main.c:1094:2: note: Taking false branch BUG_ON(n & ~0x7); ^ include/asm-generic/bug.h:63:32: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ drivers/block/drbd/drbd_main.c:1094:2: note: Loop condition is false. Exiting loop BUG_ON(n & ~0x7); ^ include/asm-generic/bug.h:63:27: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ drivers/block/drbd/drbd_main.c:1095:37: note: The result of the left shift is undefined because the left operand is negative p->encoding = (p->encoding & (~0x7 << 4)) | (n << 4); ~~~~ ^ >> drivers/block/drbd/drbd_main.c:2819:2: warning: Use of memory after it is >> freed [clang-analyzer-unix.Malloc] for_each_connection(connection, resource) { ^ drivers/block/drbd/drbd_int.h:1036:2: note: expanded from macro 'for_each_connection' list_for_each_entry(connection, &resource->connections, connections) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:630:13: note: expanded from macro 'list_for_each_entry' pos = list_next_entry(pos, member)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:555:2: note: expanded from macro 'list_next_entry' list_entry((pos)->member.next, typeof(*(pos)), member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:703:25: note: expanded from macro 'container_of' void *__mptr = (void *)(ptr); \ ^~~~~ drivers/block/drbd/drbd_main.c:2710:6: note: Assuming 'device' is null if (device) ^~~~~~ drivers/block/drbd/drbd_main.c:2710:2: note: Taking false branch if (device) ^ drivers/block/drbd/drbd_main.c:2715:6: note: Assuming 'device' is non-null if (!device) ^~~~~~~ drivers/block/drbd/drbd_main.c:2715:2: note: Taking false branch if (!device) ^ drivers/block/drbd/drbd_main.c:2727:6: note: Assuming 'q' is non-null if (!q) ^~ drivers/block/drbd/drbd_main.c:2727:2: note: Taking false branch if (!q) ^ drivers/block/drbd/drbd_main.c:2731:9: note: Assuming '__disk' is non-null disk = alloc_disk(1); ^ include/linux/genhd.h:278:28: note: expanded from macro 'alloc_disk' #define alloc_disk(minors) alloc_disk_node(minors, NUMA_NO_NODE) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/genhd.h:272:6: note: expanded from macro 'alloc_disk_node' if (__disk) \ ^~~~~~ drivers/block/drbd/drbd_main.c:2731:9: note: Taking true branch disk = alloc_disk(1); ^ include/linux/genhd.h:278:28: note: expanded from macro 'alloc_disk' #define alloc_disk(minors) alloc_disk_node(minors, NUMA_NO_NODE) ^ include/linux/genhd.h:272:2: note: expanded from macro 'alloc_disk_node' if (__disk) \ ^ drivers/block/drbd/drbd_main.c:2731:9: note: Loop condition is false. Exiting loop disk = alloc_disk(1); ^ include/linux/genhd.h:278:28: note: expanded from macro 'alloc_disk' #define alloc_disk(minors) alloc_disk_node(minors, NUMA_NO_NODE) ^ include/linux/genhd.h:273:3: note: expanded from macro 'alloc_disk_node' lockdep_init_map(&__disk->lockdep_map, __name, &__key, 0); \ ^ include/linux/lockdep.h:372:3: note: expanded from macro 'lockdep_init_map' do { (void)(name); (void)(key); } while (0) ^ drivers/block/drbd/drbd_main.c:2732:7: note: 'disk' is non-null if (!disk) ^~~~ drivers/block/drbd/drbd_main.c:2732:2: note: Taking false branch if (!disk) ^ drivers/block/drbd/drbd_main.c:2751:6: note: Assuming field 'page' is non-null if (!device->md_io.page) ^~~~~~~~~~~~~~~~~~~ drivers/block/drbd/drbd_main.c:2751:2: note: Taking false branch if (!device->md_io.page) ^ drivers/block/drbd/drbd_main.c:2754:6: note: Assuming the condition is false if (drbd_bm_init(device)) ^~~~~~~~~~~~~~~~~~~~ drivers/block/drbd/drbd_main.c:2754:2: note: Taking false branch if (drbd_bm_init(device)) ^ drivers/block/drbd/drbd_main.c:2760:6: note: Assuming 'id' is >= 0 if (id < 0) { ^~~~~~ drivers/block/drbd/drbd_main.c:2760:2: note: Taking false branch if (id < 0) { ^ drivers/block/drbd/drbd_main.c:2768:6: note: Assuming 'id' is >= 0 if (id < 0) { ^~~~~~ drivers/block/drbd/drbd_main.c:2768:2: note: Taking false branch if (id < 0) { ^ drivers/block/drbd/drbd_main.c:2777:2: note: Left side of '&&' is false for_each_connection(connection, resource) { ^ drivers/block/drbd/drbd_int.h:1036:2: note: expanded from macro 'for_each_connection' list_for_each_entry(connection, &resource->connections, connections) vim +2819 drivers/block/drbd/drbd_main.c 113fef9e20e0d6 Lars Ellenberg 2013-03-22 2696 a910b12352f5dd Lars Ellenberg 2014-04-28 2697 enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigned int minor) b411b3637fa71f Philipp Reisner 2009-09-25 2698 { a910b12352f5dd Lars Ellenberg 2014-04-28 2699 struct drbd_resource *resource = adm_ctx->resource; b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2700 struct drbd_connection *connection; b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2701 struct drbd_device *device; b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2702 struct drbd_peer_device *peer_device, *tmp_peer_device; b411b3637fa71f Philipp Reisner 2009-09-25 2703 struct gendisk *disk; b411b3637fa71f Philipp Reisner 2009-09-25 2704 struct request_queue *q; 93e4bf7a776e86 Andreas Gruenbacher 2013-05-23 2705 int id; a910b12352f5dd Lars Ellenberg 2014-04-28 2706 int vnr = adm_ctx->volume; 8432b31457bee1 Lars Ellenberg 2011-03-08 2707 enum drbd_ret_code err = ERR_NOMEM; 774b305518a68a Philipp Reisner 2011-02-22 2708 b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2709 device = minor_to_device(minor); b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2710 if (device) 179e20b8df97e0 Andreas Gruenbacher 2014-11-10 2711 return ERR_MINOR_OR_VOLUME_EXISTS; b411b3637fa71f Philipp Reisner 2009-09-25 2712 b411b3637fa71f Philipp Reisner 2009-09-25 2713 /* GFP_KERNEL, we are outside of all write-out paths */ b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2714 device = kzalloc(sizeof(struct drbd_device), GFP_KERNEL); b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2715 if (!device) 774b305518a68a Philipp Reisner 2011-02-22 2716 return ERR_NOMEM; 803ea1348e412a Andreas Gruenbacher 2011-06-09 2717 kref_init(&device->kref); 803ea1348e412a Andreas Gruenbacher 2011-06-09 2718 803ea1348e412a Andreas Gruenbacher 2011-06-09 2719 kref_get(&resource->kref); 803ea1348e412a Andreas Gruenbacher 2011-06-09 2720 device->resource = resource; b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2721 device->minor = minor; b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2722 device->vnr = vnr; b411b3637fa71f Philipp Reisner 2009-09-25 2723 b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2724 drbd_init_set_defaults(device); b411b3637fa71f Philipp Reisner 2009-09-25 2725 c62b37d96b6eb3 Christoph Hellwig 2020-07-01 2726 q = blk_alloc_queue(NUMA_NO_NODE); b411b3637fa71f Philipp Reisner 2009-09-25 2727 if (!q) b411b3637fa71f Philipp Reisner 2009-09-25 2728 goto out_no_q; b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2729 device->rq_queue = q; b411b3637fa71f Philipp Reisner 2009-09-25 2730 b411b3637fa71f Philipp Reisner 2009-09-25 2731 disk = alloc_disk(1); b411b3637fa71f Philipp Reisner 2009-09-25 2732 if (!disk) b411b3637fa71f Philipp Reisner 2009-09-25 2733 goto out_no_disk; b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2734 device->vdisk = disk; b411b3637fa71f Philipp Reisner 2009-09-25 2735 81e84650c200de Andreas Gruenbacher 2010-12-09 2736 set_disk_ro(disk, true); b411b3637fa71f Philipp Reisner 2009-09-25 2737 b411b3637fa71f Philipp Reisner 2009-09-25 2738 disk->queue = q; b411b3637fa71f Philipp Reisner 2009-09-25 2739 disk->major = DRBD_MAJOR; b411b3637fa71f Philipp Reisner 2009-09-25 2740 disk->first_minor = minor; b411b3637fa71f Philipp Reisner 2009-09-25 2741 disk->fops = &drbd_ops; b411b3637fa71f Philipp Reisner 2009-09-25 2742 sprintf(disk->disk_name, "drbd%d", minor); b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2743 disk->private_data = device; b411b3637fa71f Philipp Reisner 2009-09-25 2744 fe8fb75e3a1f6f Jens Axboe 2016-03-30 2745 blk_queue_write_cache(q, true, true); 99432fcc528d7a Philipp Reisner 2011-05-20 2746 /* Setting the max_hw_sectors to an odd value of 8kibyte here 99432fcc528d7a Philipp Reisner 2011-05-20 2747 This triggers a max_bio_size message upon first attach or connect */ 99432fcc528d7a Philipp Reisner 2011-05-20 2748 blk_queue_max_hw_sectors(q, DRBD_MAX_BIO_SIZE_SAFE >> 8); b411b3637fa71f Philipp Reisner 2009-09-25 2749 e37d2438d8e5e4 Lars Ellenberg 2014-04-01 2750 device->md_io.page = alloc_page(GFP_KERNEL); e37d2438d8e5e4 Lars Ellenberg 2014-04-01 2751 if (!device->md_io.page) b411b3637fa71f Philipp Reisner 2009-09-25 2752 goto out_no_io_page; b411b3637fa71f Philipp Reisner 2009-09-25 2753 b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2754 if (drbd_bm_init(device)) b411b3637fa71f Philipp Reisner 2009-09-25 2755 goto out_no_bitmap; b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2756 device->read_requests = RB_ROOT; b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2757 device->write_requests = RB_ROOT; b411b3637fa71f Philipp Reisner 2009-09-25 2758 93e4bf7a776e86 Andreas Gruenbacher 2013-05-23 2759 id = idr_alloc(&drbd_devices, device, minor, minor + 1, GFP_KERNEL); 93e4bf7a776e86 Andreas Gruenbacher 2013-05-23 2760 if (id < 0) { f221f4bcc5f40e Andreas Gruenbacher 2014-11-10 2761 if (id == -ENOSPC) 179e20b8df97e0 Andreas Gruenbacher 2014-11-10 2762 err = ERR_MINOR_OR_VOLUME_EXISTS; 56de210245487e Tejun Heo 2013-02-27 2763 goto out_no_minor_idr; 8432b31457bee1 Lars Ellenberg 2011-03-08 2764 } 803ea1348e412a Andreas Gruenbacher 2011-06-09 2765 kref_get(&device->kref); 803ea1348e412a Andreas Gruenbacher 2011-06-09 2766 803ea1348e412a Andreas Gruenbacher 2011-06-09 2767 id = idr_alloc(&resource->devices, device, vnr, vnr + 1, GFP_KERNEL); 803ea1348e412a Andreas Gruenbacher 2011-06-09 2768 if (id < 0) { f221f4bcc5f40e Andreas Gruenbacher 2014-11-10 2769 if (id == -ENOSPC) 179e20b8df97e0 Andreas Gruenbacher 2014-11-10 2770 err = ERR_MINOR_OR_VOLUME_EXISTS; 803ea1348e412a Andreas Gruenbacher 2011-06-09 2771 goto out_idr_remove_minor; 803ea1348e412a Andreas Gruenbacher 2011-06-09 2772 } 803ea1348e412a Andreas Gruenbacher 2011-06-09 2773 kref_get(&device->kref); 8432b31457bee1 Lars Ellenberg 2011-03-08 2774 b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2775 INIT_LIST_HEAD(&device->peer_devices); 4ce4926683b820 Lars Ellenberg 2014-05-06 2776 INIT_LIST_HEAD(&device->pending_bitmap_io); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2777 for_each_connection(connection, resource) { b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2778 peer_device = kzalloc(sizeof(struct drbd_peer_device), GFP_KERNEL); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2779 if (!peer_device) b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2780 goto out_idr_remove_from_resource; b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2781 peer_device->connection = connection; b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2782 peer_device->device = device; b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2783 b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2784 list_add(&peer_device->peer_devices, &device->peer_devices); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2785 kref_get(&device->kref); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2786 c06ece6ba6f1bb Andreas Gruenbacher 2011-06-21 2787 id = idr_alloc(&connection->peer_devices, peer_device, vnr, vnr + 1, GFP_KERNEL); 93e4bf7a776e86 Andreas Gruenbacher 2013-05-23 2788 if (id < 0) { f221f4bcc5f40e Andreas Gruenbacher 2014-11-10 2789 if (id == -ENOSPC) 8432b31457bee1 Lars Ellenberg 2011-03-08 2790 err = ERR_INVALID_REQUEST; 803ea1348e412a Andreas Gruenbacher 2011-06-09 2791 goto out_idr_remove_from_resource; 56de210245487e Tejun Heo 2013-02-27 2792 } b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2793 kref_get(&connection->kref); 668700b40a7c87 Philipp Reisner 2015-03-16 2794 INIT_WORK(&peer_device->send_acks_work, drbd_send_acks_wf); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2795 } 56de210245487e Tejun Heo 2013-02-27 2796 b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2797 if (init_submitter(device)) { 113fef9e20e0d6 Lars Ellenberg 2013-03-22 2798 err = ERR_NOMEM; 113fef9e20e0d6 Lars Ellenberg 2013-03-22 2799 goto out_idr_remove_vol; 113fef9e20e0d6 Lars Ellenberg 2013-03-22 2800 } 113fef9e20e0d6 Lars Ellenberg 2013-03-22 2801 774b305518a68a Philipp Reisner 2011-02-22 2802 add_disk(disk); 774b305518a68a Philipp Reisner 2011-02-22 2803 2325eb661f745e Philipp Reisner 2011-03-15 2804 /* inherit the connection state */ b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2805 device->state.conn = first_connection(resource)->cstate; 69a227731a378f Andreas Gruenbacher 2011-08-09 2806 if (device->state.conn == C_WF_REPORT_PARAMS) { 69a227731a378f Andreas Gruenbacher 2011-08-09 2807 for_each_peer_device(peer_device, device) 69a227731a378f Andreas Gruenbacher 2011-08-09 2808 drbd_connected(peer_device); 69a227731a378f Andreas Gruenbacher 2011-08-09 2809 } 4d3d5aa83aa45f Lars Ellenberg 2014-05-02 2810 /* move to create_peer_device() */ 4d3d5aa83aa45f Lars Ellenberg 2014-05-02 2811 for_each_peer_device(peer_device, device) 4d3d5aa83aa45f Lars Ellenberg 2014-05-02 2812 drbd_debugfs_peer_device_add(peer_device); 4d3d5aa83aa45f Lars Ellenberg 2014-05-02 2813 drbd_debugfs_device_add(device); 774b305518a68a Philipp Reisner 2011-02-22 2814 return NO_ERROR; b411b3637fa71f Philipp Reisner 2009-09-25 2815 113fef9e20e0d6 Lars Ellenberg 2013-03-22 2816 out_idr_remove_vol: c06ece6ba6f1bb Andreas Gruenbacher 2011-06-21 2817 idr_remove(&connection->peer_devices, vnr); 803ea1348e412a Andreas Gruenbacher 2011-06-09 2818 out_idr_remove_from_resource: b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 @2819 for_each_connection(connection, resource) { d3e709e63e97e5 Matthew Wilcox 2016-12-22 2820 peer_device = idr_remove(&connection->peer_devices, vnr); d3e709e63e97e5 Matthew Wilcox 2016-12-22 2821 if (peer_device) b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2822 kref_put(&connection->kref, drbd_destroy_connection); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2823 } b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2824 for_each_peer_device_safe(peer_device, tmp_peer_device, device) { b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2825 list_del(&peer_device->peer_devices); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2826 kfree(peer_device); b6f85ef9538b21 Andreas Gruenbacher 2011-07-06 2827 } 803ea1348e412a Andreas Gruenbacher 2011-06-09 2828 idr_remove(&resource->devices, vnr); 8432b31457bee1 Lars Ellenberg 2011-03-08 2829 out_idr_remove_minor: 93e4bf7a776e86 Andreas Gruenbacher 2013-05-23 2830 idr_remove(&drbd_devices, minor); 569083c08dc16c Lars Ellenberg 2011-03-07 2831 synchronize_rcu(); 8432b31457bee1 Lars Ellenberg 2011-03-08 2832 out_no_minor_idr: b30ab7913b0a7b Andreas Gruenbacher 2011-07-03 2833 drbd_bm_cleanup(device); b411b3637fa71f Philipp Reisner 2009-09-25 2834 out_no_bitmap: e37d2438d8e5e4 Lars Ellenberg 2014-04-01 2835 __free_page(device->md_io.page); b411b3637fa71f Philipp Reisner 2009-09-25 2836 out_no_io_page: b411b3637fa71f Philipp Reisner 2009-09-25 2837 put_disk(disk); b411b3637fa71f Philipp Reisner 2009-09-25 2838 out_no_disk: b411b3637fa71f Philipp Reisner 2009-09-25 2839 blk_cleanup_queue(q); b411b3637fa71f Philipp Reisner 2009-09-25 2840 out_no_q: 803ea1348e412a Andreas Gruenbacher 2011-06-09 2841 kref_put(&resource->kref, drbd_destroy_resource); a6b32bc3cebd3f Andreas Gruenbacher 2011-05-31 2842 kfree(device); 8432b31457bee1 Lars Ellenberg 2011-03-08 2843 return err; b411b3637fa71f Philipp Reisner 2009-09-25 2844 } b411b3637fa71f Philipp Reisner 2009-09-25 2845 :::::: The code at line 2819 was first introduced by commit :::::: b6f85ef9538b2111a8ba0bbfae9aaebabfc94961 drbd: Iterate over all connections :::::: TO: Andreas Gruenbacher <[email protected]> :::::: CC: Philipp Reisner <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
