Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

安装docker成功,启动容器失败 #3

Closed
litongjava opened this issue Sep 13, 2019 · 9 comments
Closed

安装docker成功,启动容器失败 #3

litongjava opened this issue Sep 13, 2019 · 9 comments
Assignees
Labels
aliyun-linux-os Aliyun Linux OS issues

Comments

@litongjava
Copy link

使用yum -y install docker 命令安装docker后,使用docker run 命令启动镜像,镜像的状态一直是restarting,测试了好多的镜像,都是restarting,但是将操作系统换成CentOS-7.6就好了
启动镜像是docker服务的日志如下

Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.518545793+08:00" level=warning msg="Your kernel does not support cgroup rt period"
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.518559425+08:00" level=warning msg="Your kernel does not support cgroup rt runtime"
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.518886791+08:00" level=info msg="Loading containers: start."
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.564268110+08:00" level=info msg="Firewalld running: false"
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.617425407+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address"
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.650312231+08:00" level=info msg="Loading containers: done."
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.672847169+08:00" level=warning msg="Not using native diff for overlay2, this may cause degraded performance for building images: kernel has CONFIG_OVERLAY_FS_REDIRECT_DIR enabled"
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.679713246+08:00" level=info msg="Daemon has completed initialization"
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.679743201+08:00" level=info msg="Docker daemon" commit="7f2769b/1.13.1" graphdriver=overlay2 version=1.13.1
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:09:52.687493602+08:00" level=info msg="API listen on /var/run/docker.sock"
Sep 13 13:09:52 iZuf6j6id5y6dup93gcestZ systemd[1]: Started Docker Application Container Engine.
Sep 13 13:10:15 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:10:15.402430270+08:00" level=error msg="Handler for POST /v1.26/containers/create returned error: No such image: litongjava/ibotcluster:1.7"
Sep 13 13:11:13 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:11:13.019101870+08:00" level=error msg="Handler for POST /v1.26/containers/create returned error: No such image: litongjava/aiengine:20171020"
Sep 13 13:12:12 iZuf6j6id5y6dup93gcestZ oci-umount[1860]: umounthook <debug>: prestart container_id:6e504e96d4f8 rootfs:/var/lib/docker/overlay2/de6728905b08e1eb84ad901a66c0fdc61723e0ed037e488a2c64b8e7cb2f970b/merged
Sep 13 13:12:13 iZuf6j6id5y6dup93gcestZ dockerd-current[1562]: time="2019-09-13T13:12:13.006790546+08:00" level=warning msg="6e504e96d4f8c46b34d4dbcd7ee915110504ae3a04166a2ffbb3bc65e0aae25b cleanup: failed to unmount secrets: invalid argument"
Sep 13 13:12:13 iZuf6j6id5y6dup93gcestZ oci-umount[1969]: umounthook <debug>: prestart container_id:6e504e96d4f8 
@josephhz
Copy link
Contributor

Could you please comment out what's your kernel and docker version?

@litongjava
Copy link
Author

当时无法解决,我已经换成了CentOS -7,具体的信息已经没有了
我是如何使用这个操作系统的
1.登录onsole.aliyun.com
2.云服务器ECS->创建实例
3.镜像选择 aliyun linux 2.1903 64位
创建完后登录aliyun linux,使用yum -y install docker安装docker,安装完成随便启动一个容器就会出现上面的信息

@shiloong
Copy link
Collaborator

我直接购买了一个alinux2实例,测试运行docker没有问题:
yum -y install docker
systemctl start docker
docker run --rm --name test -it busybox

  1. 你”安装完成随便启动一个容器“,启动的什么容器?具体命令行方便给一下吗?
  2. 能否运行下列命令看看输出:
    uname -r
    docker --version
    docker images
  3. 能否测试下我测试的busybox容器,看看是否能正常工作?

@litongjava
Copy link
Author

太奇怪了,可遇不可求吗?
我启动容器的命令是

docker run -d --restart=always --name redis --hostname redis --net=ibotex_server -p 6379:6379 redis:latest

最近没有购买alinux2,下次吧

@shiloong
Copy link
Collaborator

在我买的实例上试了下你的命令,docker能启动,你回头再试试看吧:

[root@iZbp1iji5sowsldq0dfxkbZ ~]# docker run -d --restart=always --name redis --hostname redis  -p 6379:6379 redis:latest
22e51ec692b73b4eeb4e8c05d5939b7fb9dcb97e4f67c8294f201ffc05a4ea7f
[root@iZbp1iji5sowsldq0dfxkbZ ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
22e51ec692b7        redis:latest        "docker-entrypoint..."   9 seconds ago       Up 8 seconds        0.0.0.0:6379->6379/tcp   redis
[root@iZbp1iji5sowsldq0dfxkbZ ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/redis     latest              63130206b0fa        4 days ago          98.2 MB
docker.io/busybox   latest              19485c79a9bb        12 days ago         1.22 MB
[root@iZbp1iji5sowsldq0dfxkbZ ~]#

casparant pushed a commit that referenced this issue Sep 28, 2019
[ Upstream commit 5518424 ]

ifmsh->csa is an RCU-protected pointer. The writer context
in ieee80211_mesh_finish_csa() is already mutually
exclusive with wdev->sdata.mtx, but the RCU checker did
not know this. Use rcu_dereference_protected() to avoid a
warning.

fixes the following warning:

[   12.519089] =============================
[   12.520042] WARNING: suspicious RCU usage
[   12.520652] 5.1.0-rc7-wt+ #16 Tainted: G        W
[   12.521409] -----------------------------
[   12.521972] net/mac80211/mesh.c:1223 suspicious rcu_dereference_check() usage!
[   12.522928] other info that might help us debug this:
[   12.523984] rcu_scheduler_active = 2, debug_locks = 1
[   12.524855] 5 locks held by kworker/u8:2/152:
[   12.525438]  #0: 00000000057be08c ((wq_completion)phy0){+.+.}, at: process_one_work+0x1a2/0x620
[   12.526607]  #1: 0000000059c6b07a ((work_completion)(&sdata->csa_finalize_work)){+.+.}, at: process_one_work+0x1a2/0x620
[   12.528001]  #2: 00000000f184ba7d (&wdev->mtx){+.+.}, at: ieee80211_csa_finalize_work+0x2f/0x90
[   12.529116]  #3: 00000000831a1f54 (&local->mtx){+.+.}, at: ieee80211_csa_finalize_work+0x47/0x90
[   12.530233]  #4: 00000000fd06f988 (&local->chanctx_mtx){+.+.}, at: ieee80211_csa_finalize_work+0x51/0x90

Signed-off-by: Thomas Pedersen <[email protected]>
Signed-off-by: Johannes Berg <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Sep 28, 2019
[ Upstream commit 6c0ed66 ]

rtl_usb_probe() must do error handle rtl_deinit_core() only if
rtl_init_core() is done, otherwise goto error_out2.

| usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
| rtl_usb: reg 0xf0, usbctrl_vendorreq TimeOut! status:0xffffffb9 value=0x0
| rtl8192cu: Chip version 0x10
| rtl_usb: reg 0xa, usbctrl_vendorreq TimeOut! status:0xffffffb9 value=0x0
| rtl_usb: Too few input end points found
| INFO: trying to register non-static key.
| the code is fine but needs lockdep annotation.
| turning off the locking correctness validator.
| CPU: 0 PID: 12 Comm: kworker/0:1 Not tainted 5.1.0-rc4-319354-g9a33b36 #3
| Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
| Google 01/01/2011
| Workqueue: usb_hub_wq hub_event
| Call Trace:
|   __dump_stack lib/dump_stack.c:77 [inline]
|   dump_stack+0xe8/0x16e lib/dump_stack.c:113
|   assign_lock_key kernel/locking/lockdep.c:786 [inline]
|   register_lock_class+0x11b8/0x1250 kernel/locking/lockdep.c:1095
|   __lock_acquire+0xfb/0x37c0 kernel/locking/lockdep.c:3582
|   lock_acquire+0x10d/0x2f0 kernel/locking/lockdep.c:4211
|   __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
|   _raw_spin_lock_irqsave+0x44/0x60 kernel/locking/spinlock.c:152
|   rtl_c2hcmd_launcher+0xd1/0x390
| drivers/net/wireless/realtek/rtlwifi/base.c:2344
|   rtl_deinit_core+0x25/0x2d0 drivers/net/wireless/realtek/rtlwifi/base.c:574
|   rtl_usb_probe.cold+0x861/0xa70
| drivers/net/wireless/realtek/rtlwifi/usb.c:1093
|   usb_probe_interface+0x31d/0x820 drivers/usb/core/driver.c:361
|   really_probe+0x2da/0xb10 drivers/base/dd.c:509
|   driver_probe_device+0x21d/0x350 drivers/base/dd.c:671
|   __device_attach_driver+0x1d8/0x290 drivers/base/dd.c:778
|   bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:454
|   __device_attach+0x223/0x3a0 drivers/base/dd.c:844
|   bus_probe_device+0x1f1/0x2a0 drivers/base/bus.c:514
|   device_add+0xad2/0x16e0 drivers/base/core.c:2106
|   usb_set_configuration+0xdf7/0x1740 drivers/usb/core/message.c:2021
|   generic_probe+0xa2/0xda drivers/usb/core/generic.c:210
|   usb_probe_device+0xc0/0x150 drivers/usb/core/driver.c:266
|   really_probe+0x2da/0xb10 drivers/base/dd.c:509
|   driver_probe_device+0x21d/0x350 drivers/base/dd.c:671
|   __device_attach_driver+0x1d8/0x290 drivers/base/dd.c:778
|   bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:454
|   __device_attach+0x223/0x3a0 drivers/base/dd.c:844
|   bus_probe_device+0x1f1/0x2a0 drivers/base/bus.c:514
|   device_add+0xad2/0x16e0 drivers/base/core.c:2106
|   usb_new_device.cold+0x537/0xccf drivers/usb/core/hub.c:2534
|   hub_port_connect drivers/usb/core/hub.c:5089 [inline]
|   hub_port_connect_change drivers/usb/core/hub.c:5204 [inline]
|   port_event drivers/usb/core/hub.c:5350 [inline]
|   hub_event+0x138e/0x3b00 drivers/usb/core/hub.c:5432
|   process_one_work+0x90f/0x1580 kernel/workqueue.c:2269
|   worker_thread+0x9b/0xe20 kernel/workqueue.c:2415
|   kthread+0x313/0x420 kernel/kthread.c:253
|   ret_from_fork+0x3a/0x50 arch/x86/entry/entry_64.S:352

Reported-by: [email protected]
Signed-off-by: Ping-Ke Shih <[email protected]>
Acked-by: Larry Finger <[email protected]>
Signed-off-by: Kalle Valo <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Sep 28, 2019
[ Upstream commit b387e9b ]

When system memory is in heavy pressure, bch_gc_thread_start() from
run_cache_set() may fail due to out of memory. In such condition,
c->gc_thread is assigned to -ENOMEM, not NULL pointer. Then in following
failure code path bch_cache_set_error(), when cache_set_flush() gets
called, the code piece to stop c->gc_thread is broken,
         if (!IS_ERR_OR_NULL(c->gc_thread))
                 kthread_stop(c->gc_thread);

And KASAN catches such NULL pointer deference problem, with the warning
information:

[  561.207881] ==================================================================
[  561.207900] BUG: KASAN: null-ptr-deref in kthread_stop+0x3b/0x440
[  561.207904] Write of size 4 at addr 000000000000001c by task kworker/15:1/313

[  561.207913] CPU: 15 PID: 313 Comm: kworker/15:1 Tainted: G        W         5.0.0-vanilla+ #3
[  561.207916] Hardware name: Lenovo ThinkSystem SR650 -[7X05CTO1WW]-/-[7X05CTO1WW]-, BIOS -[IVE136T-2.10]- 03/22/2019
[  561.207935] Workqueue: events cache_set_flush [bcache]
[  561.207940] Call Trace:
[  561.207948]  dump_stack+0x9a/0xeb
[  561.207955]  ? kthread_stop+0x3b/0x440
[  561.207960]  ? kthread_stop+0x3b/0x440
[  561.207965]  kasan_report+0x176/0x192
[  561.207973]  ? kthread_stop+0x3b/0x440
[  561.207981]  kthread_stop+0x3b/0x440
[  561.207995]  cache_set_flush+0xd4/0x6d0 [bcache]
[  561.208008]  process_one_work+0x856/0x1620
[  561.208015]  ? find_held_lock+0x39/0x1d0
[  561.208028]  ? drain_workqueue+0x380/0x380
[  561.208048]  worker_thread+0x87/0xb80
[  561.208058]  ? __kthread_parkme+0xb6/0x180
[  561.208067]  ? process_one_work+0x1620/0x1620
[  561.208072]  kthread+0x326/0x3e0
[  561.208079]  ? kthread_create_worker_on_cpu+0xc0/0xc0
[  561.208090]  ret_from_fork+0x3a/0x50
[  561.208110] ==================================================================
[  561.208113] Disabling lock debugging due to kernel taint
[  561.208115] irq event stamp: 11800231
[  561.208126] hardirqs last  enabled at (11800231): [<ffffffff83008538>] do_syscall_64+0x18/0x410
[  561.208127] BUG: unable to handle kernel NULL pointer dereference at 000000000000001c
[  561.208129] #PF error: [WRITE]
[  561.312253] hardirqs last disabled at (11800230): [<ffffffff830052ff>] trace_hardirqs_off_thunk+0x1a/0x1c
[  561.312259] softirqs last  enabled at (11799832): [<ffffffff850005c7>] __do_softirq+0x5c7/0x8c3
[  561.405975] PGD 0 P4D 0
[  561.442494] softirqs last disabled at (11799821): [<ffffffff831add2c>] irq_exit+0x1ac/0x1e0
[  561.791359] Oops: 0002 [#1] SMP KASAN NOPTI
[  561.791362] CPU: 15 PID: 313 Comm: kworker/15:1 Tainted: G    B   W         5.0.0-vanilla+ #3
[  561.791363] Hardware name: Lenovo ThinkSystem SR650 -[7X05CTO1WW]-/-[7X05CTO1WW]-, BIOS -[IVE136T-2.10]- 03/22/2019
[  561.791371] Workqueue: events cache_set_flush [bcache]
[  561.791374] RIP: 0010:kthread_stop+0x3b/0x440
[  561.791376] Code: 00 00 65 8b 05 26 d5 e0 7c 89 c0 48 0f a3 05 ec aa df 02 0f 82 dc 02 00 00 4c 8d 63 20 be 04 00 00 00 4c 89 e7 e8 65 c5 53 00 <f0> ff 43 20 48 8d 7b 24 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48
[  561.791377] RSP: 0018:ffff88872fc8fd10 EFLAGS: 00010286
[  561.838895] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  561.838916] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  561.838934] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  561.838948] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  561.838966] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  561.838979] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  561.838996] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  563.067028] RAX: 0000000000000000 RBX: fffffffffffffffc RCX: ffffffff832dd314
[  563.067030] RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000297
[  563.067032] RBP: ffff88872fc8fe88 R08: fffffbfff0b8213d R09: fffffbfff0b8213d
[  563.067034] R10: 0000000000000001 R11: fffffbfff0b8213c R12: 000000000000001c
[  563.408618] R13: ffff88dc61cc0f68 R14: ffff888102b94900 R15: ffff88dc61cc0f68
[  563.408620] FS:  0000000000000000(0000) GS:ffff888f7dc00000(0000) knlGS:0000000000000000
[  563.408622] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  563.408623] CR2: 000000000000001c CR3: 0000000f48a1a004 CR4: 00000000007606e0
[  563.408625] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  563.408627] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[  563.904795] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  563.915796] PKRU: 55555554
[  563.915797] Call Trace:
[  563.915807]  cache_set_flush+0xd4/0x6d0 [bcache]
[  563.915812]  process_one_work+0x856/0x1620
[  564.001226] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  564.033563]  ? find_held_lock+0x39/0x1d0
[  564.033567]  ? drain_workqueue+0x380/0x380
[  564.033574]  worker_thread+0x87/0xb80
[  564.062823] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  564.118042]  ? __kthread_parkme+0xb6/0x180
[  564.118046]  ? process_one_work+0x1620/0x1620
[  564.118048]  kthread+0x326/0x3e0
[  564.118050]  ? kthread_create_worker_on_cpu+0xc0/0xc0
[  564.167066] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  564.252441]  ret_from_fork+0x3a/0x50
[  564.252447] Modules linked in: msr rpcrdma sunrpc rdma_ucm ib_iser ib_umad rdma_cm ib_ipoib i40iw configfs iw_cm ib_cm libiscsi scsi_transport_iscsi mlx4_ib ib_uverbs mlx4_en ib_core nls_iso8859_1 nls_cp437 vfat fat intel_rapl skx_edac x86_pkg_temp_thermal coretemp iTCO_wdt iTCO_vendor_support crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel ses raid0 aesni_intel cdc_ether enclosure usbnet ipmi_ssif joydev aes_x86_64 i40e scsi_transport_sas mii bcache md_mod crypto_simd mei_me ioatdma crc64 ptp cryptd pcspkr i2c_i801 mlx4_core glue_helper pps_core mei lpc_ich dca wmi ipmi_si ipmi_devintf nd_pmem dax_pmem nd_btt ipmi_msghandler device_dax pcc_cpufreq button hid_generic usbhid mgag200 i2c_algo_bit drm_kms_helper syscopyarea sysfillrect xhci_pci sysimgblt fb_sys_fops xhci_hcd ttm megaraid_sas drm usbcore nfit libnvdimm sg dm_multipath dm_mod scsi_dh_rdac scsi_dh_emc scsi_dh_alua efivarfs
[  564.299390] bcache: bch_count_io_errors() nvme0n1: IO error on writing btree.
[  564.348360] CR2: 000000000000001c
[  564.348362] ---[ end trace b7f0e5cc7b2103b0 ]---

Therefore, it is not enough to only check whether c->gc_thread is NULL,
we should use IS_ERR_OR_NULL() to check both NULL pointer and error
value.

This patch changes the above buggy code piece in this way,
         if (!IS_ERR_OR_NULL(c->gc_thread))
                 kthread_stop(c->gc_thread);

Signed-off-by: Coly Li <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Sep 28, 2019
[ Upstream commit 3f167e1 ]

ipv4_pdp_add() is called in RCU read-side critical section.
So GFP_KERNEL should not be used in the function.
This patch make ipv4_pdp_add() to use GFP_ATOMIC instead of GFP_KERNEL.

Test commands:
gtp-link add gtp1 &
gtp-tunnel add gtp1 v1 100 200 1.1.1.1 2.2.2.2

Splat looks like:
[  130.618881] =============================
[  130.626382] WARNING: suspicious RCU usage
[  130.626994] 5.2.0-rc6+ #50 Not tainted
[  130.627622] -----------------------------
[  130.628223] ./include/linux/rcupdate.h:266 Illegal context switch in RCU read-side critical section!
[  130.629684]
[  130.629684] other info that might help us debug this:
[  130.629684]
[  130.631022]
[  130.631022] rcu_scheduler_active = 2, debug_locks = 1
[  130.632136] 4 locks held by gtp-tunnel/1025:
[  130.632925]  #0: 000000002b93c8b7 (cb_lock){++++}, at: genl_rcv+0x15/0x40
[  130.634159]  #1: 00000000f17bc999 (genl_mutex){+.+.}, at: genl_rcv_msg+0xfb/0x130
[  130.635487]  #2: 00000000c644ed8e (rtnl_mutex){+.+.}, at: gtp_genl_new_pdp+0x18c/0x1150 [gtp]
[  130.636936]  #3: 0000000007a1cde7 (rcu_read_lock){....}, at: gtp_genl_new_pdp+0x187/0x1150 [gtp]
[  130.638348]
[  130.638348] stack backtrace:
[  130.639062] CPU: 1 PID: 1025 Comm: gtp-tunnel Not tainted 5.2.0-rc6+ #50
[  130.641318] Call Trace:
[  130.641707]  dump_stack+0x7c/0xbb
[  130.642252]  ___might_sleep+0x2c0/0x3b0
[  130.642862]  kmem_cache_alloc_trace+0x1cd/0x2b0
[  130.643591]  gtp_genl_new_pdp+0x6c5/0x1150 [gtp]
[  130.644371]  genl_family_rcv_msg+0x63a/0x1030
[  130.645074]  ? mutex_lock_io_nested+0x1090/0x1090
[  130.645845]  ? genl_unregister_family+0x630/0x630
[  130.646592]  ? debug_show_all_locks+0x2d0/0x2d0
[  130.647293]  ? check_flags.part.40+0x440/0x440
[  130.648099]  genl_rcv_msg+0xa3/0x130
[ ... ]

Fixes: 459aa66 ("gtp: add initial driver for datapath of GPRS Tunneling Protocol (GTP-U)")
Signed-off-by: Taehee Yoo <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Sep 28, 2019
[ Upstream commit e88439d ]

[BUG]
Lockdep will report the following circular locking dependency:

  WARNING: possible circular locking dependency detected
  5.2.0-rc2-custom #24 Tainted: G           O
  ------------------------------------------------------
  btrfs/8631 is trying to acquire lock:
  000000002536438c (&fs_info->qgroup_ioctl_lock#2){+.+.}, at: btrfs_qgroup_inherit+0x40/0x620 [btrfs]

  but task is already holding lock:
  000000003d52cc23 (&fs_info->tree_log_mutex){+.+.}, at: create_pending_snapshot+0x8b6/0xe60 [btrfs]

  which lock already depends on the new lock.

  the existing dependency chain (in reverse order) is:

  -> #2 (&fs_info->tree_log_mutex){+.+.}:
         __mutex_lock+0x76/0x940
         mutex_lock_nested+0x1b/0x20
         btrfs_commit_transaction+0x475/0xa00 [btrfs]
         btrfs_commit_super+0x71/0x80 [btrfs]
         close_ctree+0x2bd/0x320 [btrfs]
         btrfs_put_super+0x15/0x20 [btrfs]
         generic_shutdown_super+0x72/0x110
         kill_anon_super+0x18/0x30
         btrfs_kill_super+0x16/0xa0 [btrfs]
         deactivate_locked_super+0x3a/0x80
         deactivate_super+0x51/0x60
         cleanup_mnt+0x3f/0x80
         __cleanup_mnt+0x12/0x20
         task_work_run+0x94/0xb0
         exit_to_usermode_loop+0xd8/0xe0
         do_syscall_64+0x210/0x240
         entry_SYSCALL_64_after_hwframe+0x49/0xbe

  -> #1 (&fs_info->reloc_mutex){+.+.}:
         __mutex_lock+0x76/0x940
         mutex_lock_nested+0x1b/0x20
         btrfs_commit_transaction+0x40d/0xa00 [btrfs]
         btrfs_quota_enable+0x2da/0x730 [btrfs]
         btrfs_ioctl+0x2691/0x2b40 [btrfs]
         do_vfs_ioctl+0xa9/0x6d0
         ksys_ioctl+0x67/0x90
         __x64_sys_ioctl+0x1a/0x20
         do_syscall_64+0x65/0x240
         entry_SYSCALL_64_after_hwframe+0x49/0xbe

  -> #0 (&fs_info->qgroup_ioctl_lock#2){+.+.}:
         lock_acquire+0xa7/0x190
         __mutex_lock+0x76/0x940
         mutex_lock_nested+0x1b/0x20
         btrfs_qgroup_inherit+0x40/0x620 [btrfs]
         create_pending_snapshot+0x9d7/0xe60 [btrfs]
         create_pending_snapshots+0x94/0xb0 [btrfs]
         btrfs_commit_transaction+0x415/0xa00 [btrfs]
         btrfs_mksubvol+0x496/0x4e0 [btrfs]
         btrfs_ioctl_snap_create_transid+0x174/0x180 [btrfs]
         btrfs_ioctl_snap_create_v2+0x11c/0x180 [btrfs]
         btrfs_ioctl+0xa90/0x2b40 [btrfs]
         do_vfs_ioctl+0xa9/0x6d0
         ksys_ioctl+0x67/0x90
         __x64_sys_ioctl+0x1a/0x20
         do_syscall_64+0x65/0x240
         entry_SYSCALL_64_after_hwframe+0x49/0xbe

  other info that might help us debug this:

  Chain exists of:
    &fs_info->qgroup_ioctl_lock#2 --> &fs_info->reloc_mutex --> &fs_info->tree_log_mutex

   Possible unsafe locking scenario:

         CPU0                    CPU1
         ----                    ----
    lock(&fs_info->tree_log_mutex);
                                 lock(&fs_info->reloc_mutex);
                                 lock(&fs_info->tree_log_mutex);
    lock(&fs_info->qgroup_ioctl_lock#2);

   *** DEADLOCK ***

  6 locks held by btrfs/8631:
   #0: 00000000ed8f23f6 (sb_writers#12){.+.+}, at: mnt_want_write_file+0x28/0x60
   #1: 000000009fb1597a (&type->i_mutex_dir_key#10/1){+.+.}, at: btrfs_mksubvol+0x70/0x4e0 [btrfs]
   #2: 0000000088c5ad88 (&fs_info->subvol_sem){++++}, at: btrfs_mksubvol+0x128/0x4e0 [btrfs]
   #3: 000000009606fc3e (sb_internal#2){.+.+}, at: start_transaction+0x37a/0x520 [btrfs]
   #4: 00000000f82bbdf5 (&fs_info->reloc_mutex){+.+.}, at: btrfs_commit_transaction+0x40d/0xa00 [btrfs]
   #5: 000000003d52cc23 (&fs_info->tree_log_mutex){+.+.}, at: create_pending_snapshot+0x8b6/0xe60 [btrfs]

[CAUSE]
Due to the delayed subvolume creation, we need to call
btrfs_qgroup_inherit() inside commit transaction code, with a lot of
other mutex hold.
This hell of lock chain can lead to above problem.

[FIX]
On the other hand, we don't really need to hold qgroup_ioctl_lock if
we're in the context of create_pending_snapshot().
As in that context, we're the only one being able to modify qgroup.

All other qgroup functions which needs qgroup_ioctl_lock are either
holding a transaction handle, or will start a new transaction:
  Functions will start a new transaction():
  * btrfs_quota_enable()
  * btrfs_quota_disable()
  Functions hold a transaction handler:
  * btrfs_add_qgroup_relation()
  * btrfs_del_qgroup_relation()
  * btrfs_create_qgroup()
  * btrfs_remove_qgroup()
  * btrfs_limit_qgroup()
  * btrfs_qgroup_inherit() call inside create_subvol()

So we have a higher level protection provided by transaction, thus we
don't need to always hold qgroup_ioctl_lock in btrfs_qgroup_inherit().

Only the btrfs_qgroup_inherit() call in create_subvol() needs to hold
qgroup_ioctl_lock, while the btrfs_qgroup_inherit() call in
create_pending_snapshot() is already protected by transaction.

So the fix is to detect the context by checking
trans->transaction->state.
If we're at TRANS_STATE_COMMIT_DOING, then we're in commit transaction
context and no need to get the mutex.

Reported-by: Nikolay Borisov <[email protected]>
Signed-off-by: Qu Wenruo <[email protected]>
Signed-off-by: David Sterba <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Sep 28, 2019
commit d0a255e upstream.

A deadlock with this stacktrace was observed.

The loop thread does a GFP_KERNEL allocation, it calls into dm-bufio
shrinker and the shrinker depends on I/O completion in the dm-bufio
subsystem.

In order to fix the deadlock (and other similar ones), we set the flag
PF_MEMALLOC_NOIO at loop thread entry.

PID: 474    TASK: ffff8813e11f4600  CPU: 10  COMMAND: "kswapd0"
   #0 [ffff8813dedfb938] __schedule at ffffffff8173f405
   #1 [ffff8813dedfb990] schedule at ffffffff8173fa27
   #2 [ffff8813dedfb9b0] schedule_timeout at ffffffff81742fec
   #3 [ffff8813dedfba60] io_schedule_timeout at ffffffff8173f186
   #4 [ffff8813dedfbaa0] bit_wait_io at ffffffff8174034f
   #5 [ffff8813dedfbac0] __wait_on_bit at ffffffff8173fec8
   #6 [ffff8813dedfbb10] out_of_line_wait_on_bit at ffffffff8173ff81
   #7 [ffff8813dedfbb90] __make_buffer_clean at ffffffffa038736f [dm_bufio]
   #8 [ffff8813dedfbbb0] __try_evict_buffer at ffffffffa0387bb8 [dm_bufio]
   #9 [ffff8813dedfbbd0] dm_bufio_shrink_scan at ffffffffa0387cc3 [dm_bufio]
  #10 [ffff8813dedfbc40] shrink_slab at ffffffff811a87ce
  #11 [ffff8813dedfbd30] shrink_zone at ffffffff811ad778
  #12 [ffff8813dedfbdc0] kswapd at ffffffff811ae92f
  #13 [ffff8813dedfbec0] kthread at ffffffff810a8428
  #14 [ffff8813dedfbf50] ret_from_fork at ffffffff81745242

  PID: 14127  TASK: ffff881455749c00  CPU: 11  COMMAND: "loop1"
   #0 [ffff88272f5af228] __schedule at ffffffff8173f405
   #1 [ffff88272f5af280] schedule at ffffffff8173fa27
   #2 [ffff88272f5af2a0] schedule_preempt_disabled at ffffffff8173fd5e
   #3 [ffff88272f5af2b0] __mutex_lock_slowpath at ffffffff81741fb5
   #4 [ffff88272f5af330] mutex_lock at ffffffff81742133
   #5 [ffff88272f5af350] dm_bufio_shrink_count at ffffffffa03865f9 [dm_bufio]
   #6 [ffff88272f5af380] shrink_slab at ffffffff811a86bd
   #7 [ffff88272f5af470] shrink_zone at ffffffff811ad778
   #8 [ffff88272f5af500] do_try_to_free_pages at ffffffff811adb34
   #9 [ffff88272f5af590] try_to_free_pages at ffffffff811adef8
  #10 [ffff88272f5af610] __alloc_pages_nodemask at ffffffff811a09c3
  #11 [ffff88272f5af710] alloc_pages_current at ffffffff811e8b71
  #12 [ffff88272f5af760] new_slab at ffffffff811f4523
  #13 [ffff88272f5af7b0] __slab_alloc at ffffffff8173a1b5
  #14 [ffff88272f5af880] kmem_cache_alloc at ffffffff811f484b
  #15 [ffff88272f5af8d0] do_blockdev_direct_IO at ffffffff812535b3
  #16 [ffff88272f5afb00] __blockdev_direct_IO at ffffffff81255dc3
  #17 [ffff88272f5afb30] xfs_vm_direct_IO at ffffffffa01fe3fc [xfs]
  #18 [ffff88272f5afb90] generic_file_read_iter at ffffffff81198994
  #19 [ffff88272f5afc50] __dta_xfs_file_read_iter_2398 at ffffffffa020c970 [xfs]
  #20 [ffff88272f5afcc0] lo_rw_aio at ffffffffa0377042 [loop]
  #21 [ffff88272f5afd70] loop_queue_work at ffffffffa0377c3b [loop]
  #22 [ffff88272f5afe60] kthread_worker_fn at ffffffff810a8a0c
  #23 [ffff88272f5afec0] kthread at ffffffff810a8428
  #24 [ffff88272f5aff50] ret_from_fork at ffffffff81745242

Signed-off-by: Mikulas Patocka <[email protected]>
Cc: [email protected]
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
casparant pushed a commit that referenced this issue Sep 28, 2019
commit 6408136 upstream.

We've recently seen a workload on XFS filesystems with a repeatable
deadlock between background writeback and a multi-process application
doing concurrent writes and fsyncs to a small range of a file.

range_cyclic
writeback		Process 1		Process 2

xfs_vm_writepages
  write_cache_pages
    writeback_index = 2
    cycled = 0
    ....
    find page 2 dirty
    lock Page 2
    ->writepage
      page 2 writeback
      page 2 clean
      page 2 added to bio
    no more pages
			write()
			locks page 1
			dirties page 1
			locks page 2
			dirties page 1
			fsync()
			....
			xfs_vm_writepages
			write_cache_pages
			  start index 0
			  find page 1 towrite
			  lock Page 1
			  ->writepage
			    page 1 writeback
			    page 1 clean
			    page 1 added to bio
			  find page 2 towrite
			  lock Page 2
			  page 2 is writeback
			  <blocks>
						write()
						locks page 1
						dirties page 1
						fsync()
						....
						xfs_vm_writepages
						write_cache_pages
						  start index 0

    !done && !cycled
      sets index to 0, restarts lookup
    find page 1 dirty
						  find page 1 towrite
						  lock Page 1
						  page 1 is writeback
						  <blocks>

    lock Page 1
    <blocks>

DEADLOCK because:

	- process 1 needs page 2 writeback to complete to make
	  enough progress to issue IO pending for page 1
	- writeback needs page 1 writeback to complete so process 2
	  can progress and unlock the page it is blocked on, then it
	  can issue the IO pending for page 2
	- process 2 can't make progress until process 1 issues IO
	  for page 1

The underlying cause of the problem here is that range_cyclic writeback is
processing pages in descending index order as we hold higher index pages
in a structure controlled from above write_cache_pages().  The
write_cache_pages() caller needs to be able to submit these pages for IO
before write_cache_pages restarts writeback at mapping index 0 to avoid
wcp inverting the page lock/writeback wait order.

generic_writepages() is not susceptible to this bug as it has no private
context held across write_cache_pages() - filesystems using this
infrastructure always submit pages in ->writepage immediately and so there
is no problem with range_cyclic going back to mapping index 0.

However:
	mpage_writepages() has a private bio context,
	exofs_writepages() has page_collect
	fuse_writepages() has fuse_fill_wb_data
	nfs_writepages() has nfs_pageio_descriptor
	xfs_vm_writepages() has xfs_writepage_ctx

All of these ->writepages implementations can hold pages under writeback
in their private structures until write_cache_pages() returns, and hence
they are all susceptible to this deadlock.

Also worth noting is that ext4 has it's own bastardised version of
write_cache_pages() and so it /may/ have an equivalent deadlock.  I looked
at the code long enough to understand that it has a similar retry loop for
range_cyclic writeback reaching the end of the file and then promptly ran
away before my eyes bled too much.  I'll leave it for the ext4 developers
to determine if their code is actually has this deadlock and how to fix it
if it has.

There's a few ways I can see avoid this deadlock.  There's probably more,
but these are the first I've though of:

1. get rid of range_cyclic altogether

2. range_cyclic always stops at EOF, and we start again from
writeback index 0 on the next call into write_cache_pages()

2a. wcp also returns EAGAIN to ->writepages implementations to
indicate range cyclic has hit EOF. writepages implementations can
then flush the current context and call wpc again to continue. i.e.
lift the retry into the ->writepages implementation

3. range_cyclic uses trylock_page() rather than lock_page(), and it
skips pages it can't lock without blocking. It will already do this
for pages under writeback, so this seems like a no-brainer

3a. all non-WB_SYNC_ALL writeback uses trylock_page() to avoid
blocking as per pages under writeback.

I don't think #1 is an option - range_cyclic prevents frequently
dirtied lower file offset from starving background writeback of
rarely touched higher file offsets.

performance as going back to the start of the file implies an
immediate seek. We'll have exactly the same number of seeks if we
switch writeback to another inode, and then come back to this one
later and restart from index 0.

retry loop up into the wcp caller means we can issue IO on the
pending pages before calling wcp again, and so avoid locking or
waiting on pages in the wrong order. I'm not convinced we need to do
this given that we get the same thing from #2 on the next writeback
call from the writeback infrastructure.

inversion problem, just prevents it from becoming a deadlock
situation. I'd prefer we fix the inversion, not sweep it under the
carpet like this.

band-aid fix of #3.

So it seems that the simplest way to fix this issue is to implement
solution #2

Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Dave Chinner <[email protected]>
Reviewed-by: Jan Kara <[email protected]>
Cc: Nicholas Piggin <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
@casparant casparant added the aliyun-linux-os Aliyun Linux OS issues label Sep 28, 2019
casparant pushed a commit that referenced this issue Oct 30, 2019
…OL_MF_STRICT were specified

commit d883544 upstream.

When both MPOL_MF_MOVE* and MPOL_MF_STRICT was specified, mbind() should
try best to migrate misplaced pages, if some of the pages could not be
migrated, then return -EIO.

There are three different sub-cases:
 1. vma is not migratable
 2. vma is migratable, but there are unmovable pages
 3. vma is migratable, pages are movable, but migrate_pages() fails

If #1 happens, kernel would just abort immediately, then return -EIO,
after a7f40cf ("mm: mempolicy: make mbind() return -EIO when
MPOL_MF_STRICT is specified").

If #3 happens, kernel would set policy and migrate pages with
best-effort, but won't rollback the migrated pages and reset the policy
back.

Before that commit, they behaves in the same way.  It'd better to keep
their behavior consistent.  But, rolling back the migrated pages and
resetting the policy back sounds not feasible, so just make #1 behave as
same as #3.

Userspace will know that not everything was successfully migrated (via
-EIO), and can take whatever steps it deems necessary - attempt
rollback, determine which exact page(s) are violating the policy, etc.

Make queue_pages_range() return 1 to indicate there are unmovable pages
or vma is not migratable.

The #2 is not handled correctly in the current kernel, the following
patch will fix it.

[[email protected]: fix review comments from Vlastimil]
  Link: http://lkml.kernel.org/r/[email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Yang Shi <[email protected]>
Reviewed-by: Vlastimil Babka <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
commit cf3591e upstream.

Revert the commit bd293d0. The proper
fix has been made available with commit d0a255e ("loop: set
PF_MEMALLOC_NOIO for the worker thread").

Note that the fix offered by commit bd293d0 doesn't really prevent
the deadlock from occuring - if we look at the stacktrace reported by
Junxiao Bi, we see that it hangs in bit_wait_io and not on the mutex -
i.e. it has already successfully taken the mutex. Changing the mutex
from mutex_lock to mutex_trylock won't help with deadlocks that happen
afterwards.

PID: 474    TASK: ffff8813e11f4600  CPU: 10  COMMAND: "kswapd0"
   #0 [ffff8813dedfb938] __schedule at ffffffff8173f405
   #1 [ffff8813dedfb990] schedule at ffffffff8173fa27
   #2 [ffff8813dedfb9b0] schedule_timeout at ffffffff81742fec
   #3 [ffff8813dedfba60] io_schedule_timeout at ffffffff8173f186
   #4 [ffff8813dedfbaa0] bit_wait_io at ffffffff8174034f
   #5 [ffff8813dedfbac0] __wait_on_bit at ffffffff8173fec8
   #6 [ffff8813dedfbb10] out_of_line_wait_on_bit at ffffffff8173ff81
   #7 [ffff8813dedfbb90] __make_buffer_clean at ffffffffa038736f [dm_bufio]
   #8 [ffff8813dedfbbb0] __try_evict_buffer at ffffffffa0387bb8 [dm_bufio]
   #9 [ffff8813dedfbbd0] dm_bufio_shrink_scan at ffffffffa0387cc3 [dm_bufio]
  #10 [ffff8813dedfbc40] shrink_slab at ffffffff811a87ce
  #11 [ffff8813dedfbd30] shrink_zone at ffffffff811ad778
  #12 [ffff8813dedfbdc0] kswapd at ffffffff811ae92f
  #13 [ffff8813dedfbec0] kthread at ffffffff810a8428
  #14 [ffff8813dedfbf50] ret_from_fork at ffffffff81745242

Signed-off-by: Mikulas Patocka <[email protected]>
Cc: [email protected]
Fixes: bd293d0 ("dm bufio: fix deadlock with loop device")
Depends-on: d0a255e ("loop: set PF_MEMALLOC_NOIO for the worker thread")
Signed-off-by: Mike Snitzer <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
…s_blob()

[ Upstream commit 12fe3dd ]

Calling ceph_buffer_put() in __ceph_build_xattrs_blob() may result in
freeing the i_xattrs.blob buffer while holding the i_ceph_lock.  This can
be fixed by having this function returning the old blob buffer and have
the callers of this function freeing it when the lock is released.

The following backtrace was triggered by fstests generic/117.

  BUG: sleeping function called from invalid context at mm/vmalloc.c:2283
  in_atomic(): 1, irqs_disabled(): 0, pid: 649, name: fsstress
  4 locks held by fsstress/649:
   #0: 00000000a7478e7e (&type->s_umount_key#19){++++}, at: iterate_supers+0x77/0xf0
   #1: 00000000f8de1423 (&(&ci->i_ceph_lock)->rlock){+.+.}, at: ceph_check_caps+0x7b/0xc60
   #2: 00000000562f2b27 (&s->s_mutex){+.+.}, at: ceph_check_caps+0x3bd/0xc60
   #3: 00000000f83ce16a (&mdsc->snap_rwsem){++++}, at: ceph_check_caps+0x3ed/0xc60
  CPU: 1 PID: 649 Comm: fsstress Not tainted 5.2.0+ #439
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.1-0-ga5cab58-prebuilt.qemu.org 04/01/2014
  Call Trace:
   dump_stack+0x67/0x90
   ___might_sleep.cold+0x9f/0xb1
   vfree+0x4b/0x60
   ceph_buffer_release+0x1b/0x60
   __ceph_build_xattrs_blob+0x12b/0x170
   __send_cap+0x302/0x540
   ? __lock_acquire+0x23c/0x1e40
   ? __mark_caps_flushing+0x15c/0x280
   ? _raw_spin_unlock+0x24/0x30
   ceph_check_caps+0x5f0/0xc60
   ceph_flush_dirty_caps+0x7c/0x150
   ? __ia32_sys_fdatasync+0x20/0x20
   ceph_sync_fs+0x5a/0x130
   iterate_supers+0x8f/0xf0
   ksys_sync+0x4f/0xb0
   __ia32_sys_sync+0xa/0x10
   do_syscall_64+0x50/0x1c0
   entry_SYSCALL_64_after_hwframe+0x49/0xbe
  RIP: 0033:0x7fc6409ab617

Signed-off-by: Luis Henriques <[email protected]>
Reviewed-by: Jeff Layton <[email protected]>
Signed-off-by: Ilya Dryomov <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
[ Upstream commit af8a85a ]

Calling ceph_buffer_put() in fill_inode() may result in freeing the
i_xattrs.blob buffer while holding the i_ceph_lock.  This can be fixed by
postponing the call until later, when the lock is released.

The following backtrace was triggered by fstests generic/070.

  BUG: sleeping function called from invalid context at mm/vmalloc.c:2283
  in_atomic(): 1, irqs_disabled(): 0, pid: 3852, name: kworker/0:4
  6 locks held by kworker/0:4/3852:
   #0: 000000004270f6bb ((wq_completion)ceph-msgr){+.+.}, at: process_one_work+0x1b8/0x5f0
   #1: 00000000eb420803 ((work_completion)(&(&con->work)->work)){+.+.}, at: process_one_work+0x1b8/0x5f0
   #2: 00000000be1c53a4 (&s->s_mutex){+.+.}, at: dispatch+0x288/0x1476
   #3: 00000000559cb958 (&mdsc->snap_rwsem){++++}, at: dispatch+0x2eb/0x1476
   #4: 000000000d5ebbae (&req->r_fill_mutex){+.+.}, at: dispatch+0x2fc/0x1476
   #5: 00000000a83d0514 (&(&ci->i_ceph_lock)->rlock){+.+.}, at: fill_inode.isra.0+0xf8/0xf70
  CPU: 0 PID: 3852 Comm: kworker/0:4 Not tainted 5.2.0+ #441
  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.1-0-ga5cab58-prebuilt.qemu.org 04/01/2014
  Workqueue: ceph-msgr ceph_con_workfn
  Call Trace:
   dump_stack+0x67/0x90
   ___might_sleep.cold+0x9f/0xb1
   vfree+0x4b/0x60
   ceph_buffer_release+0x1b/0x60
   fill_inode.isra.0+0xa9b/0xf70
   ceph_fill_trace+0x13b/0xc70
   ? dispatch+0x2eb/0x1476
   dispatch+0x320/0x1476
   ? __mutex_unlock_slowpath+0x4d/0x2a0
   ceph_con_workfn+0xc97/0x2ec0
   ? process_one_work+0x1b8/0x5f0
   process_one_work+0x244/0x5f0
   worker_thread+0x4d/0x3e0
   kthread+0x105/0x140
   ? process_one_work+0x5f0/0x5f0
   ? kthread_park+0x90/0x90
   ret_from_fork+0x3a/0x50

Signed-off-by: Luis Henriques <[email protected]>
Reviewed-by: Jeff Layton <[email protected]>
Signed-off-by: Ilya Dryomov <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
[ Upstream commit 425784a ]

The async_file might be freed before the disassociation has been ended,
causing qp shutdown to use after free on it.

Since uverbs_destroy_ufile_hw is not a fence, it returns if a
disassociation is ongoing in another thread. It has to be written this way
to avoid deadlock. However this means that the ufile FD close cannot
destroy anything that may still be used by an active kref, such as the the
async_file.

To fix that move the kref_put() to be in ib_uverbs_release_file().

 BUG: unable to handle kernel paging request at ffffffffba682787
 PGD bc80e067 P4D bc80e067 PUD bc80f063 PMD 1313df163 PTE 80000000bc682061
 Oops: 0003 [#1] SMP PTI
 CPU: 1 PID: 32410 Comm: bash Tainted: G           OE 4.20.0-rc6+ #3
 Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
 RIP: 0010:__pv_queued_spin_lock_slowpath+0x1b3/0x2a0
 Code: 98 83 e2 60 49 89 df 48 8b 04 c5 80 18 72 ba 48 8d
		ba 80 32 02 00 ba 00 80 00 00 4c 8d 65 14 41 bd 01 00 00 00 48 01 c7 85
		d2 <48> 89 2f 48 89 fb 74 14 8b 45 08 85 c0 75 42 84 d2 74 6b f3 90 83
 RSP: 0018:ffffc1bbc064fb58 EFLAGS: 00010006
 RAX: ffffffffba65f4e7 RBX: ffff9f209c656c00 RCX: 0000000000000001
 RDX: 0000000000008000 RSI: 0000000000000000 RDI: ffffffffba682787
 RBP: ffff9f217bb23280 R08: 0000000000000001 R09: 0000000000000000
 R10: ffff9f209d2c7800 R11: ffffffffffffffe8 R12: ffff9f217bb23294
 R13: 0000000000000001 R14: 0000000000000000 R15: ffff9f209c656c00
 FS:  00007fac55aad740(0000) GS:ffff9f217bb00000(0000) knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
 CR2: ffffffffba682787 CR3: 000000012f8e0000 CR4: 00000000000006e0
 Call Trace:
  _raw_spin_lock_irq+0x27/0x30
  ib_uverbs_release_uevent+0x1e/0xa0 [ib_uverbs]
  uverbs_free_qp+0x7e/0x90 [ib_uverbs]
  destroy_hw_idr_uobject+0x1c/0x50 [ib_uverbs]
  uverbs_destroy_uobject+0x2e/0x180 [ib_uverbs]
  __uverbs_cleanup_ufile+0x73/0x90 [ib_uverbs]
  uverbs_destroy_ufile_hw+0x5d/0x120 [ib_uverbs]
  ib_uverbs_remove_one+0xea/0x240 [ib_uverbs]
  ib_unregister_device+0xfb/0x200 [ib_core]
  mlx5_ib_remove+0x51/0xe0 [mlx5_ib]
  mlx5_remove_device+0xc1/0xd0 [mlx5_core]
  mlx5_unregister_device+0x3d/0xb0 [mlx5_core]
  remove_one+0x2a/0x90 [mlx5_core]
  pci_device_remove+0x3b/0xc0
  device_release_driver_internal+0x16d/0x240
  unbind_store+0xb2/0x100
  kernfs_fop_write+0x102/0x180
  __vfs_write+0x36/0x1a0
  ? __alloc_fd+0xa9/0x170
  ? set_close_on_exec+0x49/0x70
  vfs_write+0xad/0x1a0
  ksys_write+0x52/0xc0
  do_syscall_64+0x5b/0x180
  entry_SYSCALL_64_after_hwframe+0x44/0xa9
 RIP: 0033:0x7fac551aac60

Cc: <[email protected]> # 4.2
Fixes: 036b106 ("IB/uverbs: Enable device removal when there are active user space applications")
Signed-off-by: Yishai Hadas <[email protected]>
Signed-off-by: Leon Romanovsky <[email protected]>
Signed-off-by: Jason Gunthorpe <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
[ Upstream commit 1cec3f2 ]

This fixes a longstanding lockdep warning triggered by
fstests/btrfs/011.

Circular locking dependency check reports warning[1], that's because the
btrfs_scrub_dev() calls the stack #0 below with, the fs_info::scrub_lock
held. The test case leading to this warning:

  $ mkfs.btrfs -f /dev/sdb
  $ mount /dev/sdb /btrfs
  $ btrfs scrub start -B /btrfs

In fact we have fs_info::scrub_workers_refcnt to track if the init and destroy
of the scrub workers are needed. So once we have incremented and decremented
the fs_info::scrub_workers_refcnt value in the thread, its ok to drop the
scrub_lock, and then actually do the btrfs_destroy_workqueue() part. So this
patch drops the scrub_lock before calling btrfs_destroy_workqueue().

  [359.258534] ======================================================
  [359.260305] WARNING: possible circular locking dependency detected
  [359.261938] 5.0.0-rc6-default #461 Not tainted
  [359.263135] ------------------------------------------------------
  [359.264672] btrfs/20975 is trying to acquire lock:
  [359.265927] 00000000d4d32bea ((wq_completion)"%s-%s""btrfs", name){+.+.}, at: flush_workqueue+0x87/0x540
  [359.268416]
  [359.268416] but task is already holding lock:
  [359.270061] 0000000053ea26a6 (&fs_info->scrub_lock){+.+.}, at: btrfs_scrub_dev+0x322/0x590 [btrfs]
  [359.272418]
  [359.272418] which lock already depends on the new lock.
  [359.272418]
  [359.274692]
  [359.274692] the existing dependency chain (in reverse order) is:
  [359.276671]
  [359.276671] -> #3 (&fs_info->scrub_lock){+.+.}:
  [359.278187]        __mutex_lock+0x86/0x9c0
  [359.279086]        btrfs_scrub_pause+0x31/0x100 [btrfs]
  [359.280421]        btrfs_commit_transaction+0x1e4/0x9e0 [btrfs]
  [359.281931]        close_ctree+0x30b/0x350 [btrfs]
  [359.283208]        generic_shutdown_super+0x64/0x100
  [359.284516]        kill_anon_super+0x14/0x30
  [359.285658]        btrfs_kill_super+0x12/0xa0 [btrfs]
  [359.286964]        deactivate_locked_super+0x29/0x60
  [359.288242]        cleanup_mnt+0x3b/0x70
  [359.289310]        task_work_run+0x98/0xc0
  [359.290428]        exit_to_usermode_loop+0x83/0x90
  [359.291445]        do_syscall_64+0x15b/0x180
  [359.292598]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
  [359.294011]
  [359.294011] -> #2 (sb_internal#2){.+.+}:
  [359.295432]        __sb_start_write+0x113/0x1d0
  [359.296394]        start_transaction+0x369/0x500 [btrfs]
  [359.297471]        btrfs_finish_ordered_io+0x2aa/0x7c0 [btrfs]
  [359.298629]        normal_work_helper+0xcd/0x530 [btrfs]
  [359.299698]        process_one_work+0x246/0x610
  [359.300898]        worker_thread+0x3c/0x390
  [359.302020]        kthread+0x116/0x130
  [359.303053]        ret_from_fork+0x24/0x30
  [359.304152]
  [359.304152] -> #1 ((work_completion)(&work->normal_work)){+.+.}:
  [359.306100]        process_one_work+0x21f/0x610
  [359.307302]        worker_thread+0x3c/0x390
  [359.308465]        kthread+0x116/0x130
  [359.309357]        ret_from_fork+0x24/0x30
  [359.310229]
  [359.310229] -> #0 ((wq_completion)"%s-%s""btrfs", name){+.+.}:
  [359.311812]        lock_acquire+0x90/0x180
  [359.312929]        flush_workqueue+0xaa/0x540
  [359.313845]        drain_workqueue+0xa1/0x180
  [359.314761]        destroy_workqueue+0x17/0x240
  [359.315754]        btrfs_destroy_workqueue+0x57/0x200 [btrfs]
  [359.317245]        scrub_workers_put+0x2c/0x60 [btrfs]
  [359.318585]        btrfs_scrub_dev+0x336/0x590 [btrfs]
  [359.319944]        btrfs_dev_replace_by_ioctl.cold.19+0x179/0x1bb [btrfs]
  [359.321622]        btrfs_ioctl+0x28a4/0x2e40 [btrfs]
  [359.322908]        do_vfs_ioctl+0xa2/0x6d0
  [359.324021]        ksys_ioctl+0x3a/0x70
  [359.325066]        __x64_sys_ioctl+0x16/0x20
  [359.326236]        do_syscall_64+0x54/0x180
  [359.327379]        entry_SYSCALL_64_after_hwframe+0x49/0xbe
  [359.328772]
  [359.328772] other info that might help us debug this:
  [359.328772]
  [359.330990] Chain exists of:
  [359.330990]   (wq_completion)"%s-%s""btrfs", name --> sb_internal#2 --> &fs_info->scrub_lock
  [359.330990]
  [359.334376]  Possible unsafe locking scenario:
  [359.334376]
  [359.336020]        CPU0                    CPU1
  [359.337070]        ----                    ----
  [359.337821]   lock(&fs_info->scrub_lock);
  [359.338506]                                lock(sb_internal#2);
  [359.339506]                                lock(&fs_info->scrub_lock);
  [359.341461]   lock((wq_completion)"%s-%s""btrfs", name);
  [359.342437]
  [359.342437]  *** DEADLOCK ***
  [359.342437]
  [359.343745] 1 lock held by btrfs/20975:
  [359.344788]  #0: 0000000053ea26a6 (&fs_info->scrub_lock){+.+.}, at: btrfs_scrub_dev+0x322/0x590 [btrfs]
  [359.346778]
  [359.346778] stack backtrace:
  [359.347897] CPU: 0 PID: 20975 Comm: btrfs Not tainted 5.0.0-rc6-default #461
  [359.348983] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.2-0-gf9626cc-prebuilt.qemu-project.org 04/01/2014
  [359.350501] Call Trace:
  [359.350931]  dump_stack+0x67/0x90
  [359.351676]  print_circular_bug.isra.37.cold.56+0x15c/0x195
  [359.353569]  check_prev_add.constprop.44+0x4f9/0x750
  [359.354849]  ? check_prev_add.constprop.44+0x286/0x750
  [359.356505]  __lock_acquire+0xb84/0xf10
  [359.357505]  lock_acquire+0x90/0x180
  [359.358271]  ? flush_workqueue+0x87/0x540
  [359.359098]  flush_workqueue+0xaa/0x540
  [359.359912]  ? flush_workqueue+0x87/0x540
  [359.360740]  ? drain_workqueue+0x1e/0x180
  [359.361565]  ? drain_workqueue+0xa1/0x180
  [359.362391]  drain_workqueue+0xa1/0x180
  [359.363193]  destroy_workqueue+0x17/0x240
  [359.364539]  btrfs_destroy_workqueue+0x57/0x200 [btrfs]
  [359.365673]  scrub_workers_put+0x2c/0x60 [btrfs]
  [359.366618]  btrfs_scrub_dev+0x336/0x590 [btrfs]
  [359.367594]  ? start_transaction+0xa1/0x500 [btrfs]
  [359.368679]  btrfs_dev_replace_by_ioctl.cold.19+0x179/0x1bb [btrfs]
  [359.369545]  btrfs_ioctl+0x28a4/0x2e40 [btrfs]
  [359.370186]  ? __lock_acquire+0x263/0xf10
  [359.370777]  ? kvm_clock_read+0x14/0x30
  [359.371392]  ? kvm_sched_clock_read+0x5/0x10
  [359.372248]  ? sched_clock+0x5/0x10
  [359.372786]  ? sched_clock_cpu+0xc/0xc0
  [359.373662]  ? do_vfs_ioctl+0xa2/0x6d0
  [359.374552]  do_vfs_ioctl+0xa2/0x6d0
  [359.375378]  ? do_sigaction+0xff/0x250
  [359.376233]  ksys_ioctl+0x3a/0x70
  [359.376954]  __x64_sys_ioctl+0x16/0x20
  [359.377772]  do_syscall_64+0x54/0x180
  [359.378841]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
  [359.380422] RIP: 0033:0x7f5429296a97

Backporting to older kernels: scrub_nocow_workers must be freed the same
way as the others.

CC: [email protected] # 4.4+
Signed-off-by: Anand Jain <[email protected]>
[ update changelog ]
Reviewed-by: David Sterba <[email protected]>
Signed-off-by: David Sterba <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
commit 443f2d5 upstream.

Observe a segmentation fault when 'perf stat' is asked to repeat forever
with the interval option.

Without fix:

  # perf stat -r 0 -I 5000 -e cycles -a sleep 10
  #           time             counts unit events
       5.000211692  3,13,89,82,34,157      cycles
      10.000380119  1,53,98,52,22,294      cycles
      10.040467280       17,16,79,265      cycles
  Segmentation fault

This problem was only observed when we use forever option aka -r 0 and
works with limited repeats. Calling print_counter with ts being set to
NULL, is not a correct option when interval is set. Hence avoid
print_counter(NULL,..)  if interval is set.

With fix:

  # perf stat -r 0 -I 5000 -e cycles -a sleep 10
   #           time             counts unit events
       5.019866622  3,15,14,43,08,697      cycles
      10.039865756  3,15,16,31,95,261      cycles
      10.059950628     1,26,05,47,158      cycles
       5.009902655  3,14,52,62,33,932      cycles
      10.019880228  3,14,52,22,89,154      cycles
      10.030543876       66,90,18,333      cycles
       5.009848281  3,14,51,98,25,437      cycles
      10.029854402  3,15,14,93,04,918      cycles
       5.009834177  3,14,51,95,92,316      cycles

Committer notes:

Did the 'git bisect' to find the cset introducing the problem to add the
Fixes tag below, and at that time the problem reproduced as:

  (gdb) run stat -r0 -I500 sleep 1
  <SNIP>
  Program received signal SIGSEGV, Segmentation fault.
  print_interval (prefix=prefix@entry=0x7fffffffc8d0 "", ts=ts@entry=0x0) at builtin-stat.c:866
  866		sprintf(prefix, "%6lu.%09lu%s", ts->tv_sec, ts->tv_nsec, csv_sep);
  (gdb) bt
  #0  print_interval (prefix=prefix@entry=0x7fffffffc8d0 "", ts=ts@entry=0x0) at builtin-stat.c:866
  #1  0x000000000041860a in print_counters (ts=ts@entry=0x0, argc=argc@entry=2, argv=argv@entry=0x7fffffffd640) at builtin-stat.c:938
  #2  0x0000000000419a7f in cmd_stat (argc=2, argv=0x7fffffffd640, prefix=<optimized out>) at builtin-stat.c:1411
  #3  0x000000000045c65a in run_builtin (p=p@entry=0x6291b8 <commands+216>, argc=argc@entry=5, argv=argv@entry=0x7fffffffd640) at perf.c:370
  #4  0x000000000045c893 in handle_internal_command (argc=5, argv=0x7fffffffd640) at perf.c:429
  #5  0x000000000045c8f1 in run_argv (argcp=argcp@entry=0x7fffffffd4ac, argv=argv@entry=0x7fffffffd4a0) at perf.c:473
  #6  0x000000000045cac9 in main (argc=<optimized out>, argv=<optimized out>) at perf.c:588
  (gdb)

Mostly the same as just before this patch:

  Program received signal SIGSEGV, Segmentation fault.
  0x00000000005874a7 in print_interval (config=0xa1f2a0 <stat_config>, evlist=0xbc9b90, prefix=0x7fffffffd1c0 "`", ts=0x0) at util/stat-display.c:964
  964		sprintf(prefix, "%6lu.%09lu%s", ts->tv_sec, ts->tv_nsec, config->csv_sep);
  (gdb) bt
  #0  0x00000000005874a7 in print_interval (config=0xa1f2a0 <stat_config>, evlist=0xbc9b90, prefix=0x7fffffffd1c0 "`", ts=0x0) at util/stat-display.c:964
  #1  0x0000000000588047 in perf_evlist__print_counters (evlist=0xbc9b90, config=0xa1f2a0 <stat_config>, _target=0xa1f0c0 <target>, ts=0x0, argc=2, argv=0x7fffffffd670)
      at util/stat-display.c:1172
  #2  0x000000000045390f in print_counters (ts=0x0, argc=2, argv=0x7fffffffd670) at builtin-stat.c:656
  #3  0x0000000000456bb5 in cmd_stat (argc=2, argv=0x7fffffffd670) at builtin-stat.c:1960
  #4  0x00000000004dd2e0 in run_builtin (p=0xa30e00 <commands+288>, argc=5, argv=0x7fffffffd670) at perf.c:310
  #5  0x00000000004dd54d in handle_internal_command (argc=5, argv=0x7fffffffd670) at perf.c:362
  #6  0x00000000004dd694 in run_argv (argcp=0x7fffffffd4cc, argv=0x7fffffffd4c0) at perf.c:406
  #7  0x00000000004dda11 in main (argc=5, argv=0x7fffffffd670) at perf.c:531
  (gdb)

Fixes: d4f63a4 ("perf stat: Introduce print_counters function")
Signed-off-by: Srikar Dronamraju <[email protected]>
Acked-by: Jiri Olsa <[email protected]>
Tested-by: Arnaldo Carvalho de Melo <[email protected]>
Tested-by: Ravi Bangoria <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Naveen N. Rao <[email protected]>
Cc: [email protected] # v4.2+
Link: http://lore.kernel.org/lkml/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
[ Upstream commit 0216234 ]

We release wrong pointer on error path in cpu_cache_level__read
function, leading to segfault:

  (gdb) r record ls
  Starting program: /root/perf/tools/perf/perf record ls
  ...
  [ perf record: Woken up 1 times to write data ]
  double free or corruption (out)

  Thread 1 "perf" received signal SIGABRT, Aborted.
  0x00007ffff7463798 in raise () from /lib64/power9/libc.so.6
  (gdb) bt
  #0  0x00007ffff7463798 in raise () from /lib64/power9/libc.so.6
  #1  0x00007ffff7443bac in abort () from /lib64/power9/libc.so.6
  #2  0x00007ffff74af8bc in __libc_message () from /lib64/power9/libc.so.6
  #3  0x00007ffff74b92b8 in malloc_printerr () from /lib64/power9/libc.so.6
  #4  0x00007ffff74bb874 in _int_free () from /lib64/power9/libc.so.6
  #5  0x0000000010271260 in __zfree (ptr=0x7fffffffa0b0) at ../../lib/zalloc..
  #6  0x0000000010139340 in cpu_cache_level__read (cache=0x7fffffffa090, cac..
  #7  0x0000000010143c90 in build_caches (cntp=0x7fffffffa118, size=<optimiz..
  ...

Releasing the proper pointer.

Fixes: 720e98b ("perf tools: Add perf data cache feature")
Signed-off-by: Jiri Olsa <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Michael Petlan <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: [email protected]: # v4.6+
Link: http://lore.kernel.org/lkml/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
casparant pushed a commit that referenced this issue Oct 30, 2019
commit 6408136 upstream.

We've recently seen a workload on XFS filesystems with a repeatable
deadlock between background writeback and a multi-process application
doing concurrent writes and fsyncs to a small range of a file.

range_cyclic
writeback		Process 1		Process 2

xfs_vm_writepages
  write_cache_pages
    writeback_index = 2
    cycled = 0
    ....
    find page 2 dirty
    lock Page 2
    ->writepage
      page 2 writeback
      page 2 clean
      page 2 added to bio
    no more pages
			write()
			locks page 1
			dirties page 1
			locks page 2
			dirties page 1
			fsync()
			....
			xfs_vm_writepages
			write_cache_pages
			  start index 0
			  find page 1 towrite
			  lock Page 1
			  ->writepage
			    page 1 writeback
			    page 1 clean
			    page 1 added to bio
			  find page 2 towrite
			  lock Page 2
			  page 2 is writeback
			  <blocks>
						write()
						locks page 1
						dirties page 1
						fsync()
						....
						xfs_vm_writepages
						write_cache_pages
						  start index 0

    !done && !cycled
      sets index to 0, restarts lookup
    find page 1 dirty
						  find page 1 towrite
						  lock Page 1
						  page 1 is writeback
						  <blocks>

    lock Page 1
    <blocks>

DEADLOCK because:

	- process 1 needs page 2 writeback to complete to make
	  enough progress to issue IO pending for page 1
	- writeback needs page 1 writeback to complete so process 2
	  can progress and unlock the page it is blocked on, then it
	  can issue the IO pending for page 2
	- process 2 can't make progress until process 1 issues IO
	  for page 1

The underlying cause of the problem here is that range_cyclic writeback is
processing pages in descending index order as we hold higher index pages
in a structure controlled from above write_cache_pages().  The
write_cache_pages() caller needs to be able to submit these pages for IO
before write_cache_pages restarts writeback at mapping index 0 to avoid
wcp inverting the page lock/writeback wait order.

generic_writepages() is not susceptible to this bug as it has no private
context held across write_cache_pages() - filesystems using this
infrastructure always submit pages in ->writepage immediately and so there
is no problem with range_cyclic going back to mapping index 0.

However:
	mpage_writepages() has a private bio context,
	exofs_writepages() has page_collect
	fuse_writepages() has fuse_fill_wb_data
	nfs_writepages() has nfs_pageio_descriptor
	xfs_vm_writepages() has xfs_writepage_ctx

All of these ->writepages implementations can hold pages under writeback
in their private structures until write_cache_pages() returns, and hence
they are all susceptible to this deadlock.

Also worth noting is that ext4 has it's own bastardised version of
write_cache_pages() and so it /may/ have an equivalent deadlock.  I looked
at the code long enough to understand that it has a similar retry loop for
range_cyclic writeback reaching the end of the file and then promptly ran
away before my eyes bled too much.  I'll leave it for the ext4 developers
to determine if their code is actually has this deadlock and how to fix it
if it has.

There's a few ways I can see avoid this deadlock.  There's probably more,
but these are the first I've though of:

1. get rid of range_cyclic altogether

2. range_cyclic always stops at EOF, and we start again from
writeback index 0 on the next call into write_cache_pages()

2a. wcp also returns EAGAIN to ->writepages implementations to
indicate range cyclic has hit EOF. writepages implementations can
then flush the current context and call wpc again to continue. i.e.
lift the retry into the ->writepages implementation

3. range_cyclic uses trylock_page() rather than lock_page(), and it
skips pages it can't lock without blocking. It will already do this
for pages under writeback, so this seems like a no-brainer

3a. all non-WB_SYNC_ALL writeback uses trylock_page() to avoid
blocking as per pages under writeback.

I don't think #1 is an option - range_cyclic prevents frequently
dirtied lower file offset from starving background writeback of
rarely touched higher file offsets.

performance as going back to the start of the file implies an
immediate seek. We'll have exactly the same number of seeks if we
switch writeback to another inode, and then come back to this one
later and restart from index 0.

retry loop up into the wcp caller means we can issue IO on the
pending pages before calling wcp again, and so avoid locking or
waiting on pages in the wrong order. I'm not convinced we need to do
this given that we get the same thing from #2 on the next writeback
call from the writeback infrastructure.

inversion problem, just prevents it from becoming a deadlock
situation. I'd prefer we fix the inversion, not sweep it under the
carpet like this.

band-aid fix of #3.

So it seems that the simplest way to fix this issue is to implement
solution #2

Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Dave Chinner <[email protected]>
Reviewed-by: Jan Kara <[email protected]>
Cc: Nicholas Piggin <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
@litongjava
Copy link
Author

litongjava commented Nov 22, 2019

新购买了一台aliyun linux,因为修改了yum源,问题出现了,问题如下

[root@xx ~]# yum -y install nginx
Loaded plugins: fastestmirror
Determining fastest mirrors
base                                                                                                                          
extras                                                                                                                        
plus                                                                                                                          
updates                                                                                                                       
(1/5): base/2.1903/x86_64/group_gz                                                                                            
(2/5): extras/2.1903/x86_64/primary_db                                                                                        
(3/5): plus/2.1903/x86_64/primary_db                                                                                          
(4/5): updates/2.1903/x86_64/primary_db                                                                                       
(5/5): base/2.1903/x86_64/primary_db                                                                                          
No package nginx available.
Error: Nothing to do
[root@xx ~]# cat /etc/redhat-release 
Aliyun Linux release 2.1903 (Hunting Beagle) 
[root@xx ~]# cd /etc/yum.repos.d/
[root@xx yum.repos.d]# ls
AliYun.repo
[root@xx yum.repos.d]# vi AliYun.repo 
[root@xx yum.repos.d]# curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.rep
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2523  100  2523    0     0  13370      0 --:--:-- --:--:-- --:--:-- 13420
[root@xx yum.repos.d]# curl -o /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   664  100   664    0     0   2659      0 --:--:-- --:--:-- --:--:--  2666
[root@xx yum.repos.d]# yum -y install nginx
Loaded plugins: fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Loading mirror speeds from cached hostfile
base                                                                                                                          
epel                                                                                                                          
extras                                                                                                                        
plus                                                                                                                          
updates                                                                                                                       
(1/3): epel/x86_64/group_gz                                                                                                   
(2/3): epel/x86_64/updateinfo                                                                                                 
(3/3): epel/x86_64/primary_db                                                                                                 
Resolving Dependencies
--> Running transaction check
---> Package nginx.x86_64 1:1.16.1-1.el7 will be installed
--> Processing Dependency: nginx-all-modules = 1:1.16.1-1.el7 for package: 1:nginx-1.16.1-1.el7.x86_64
--> Processing Dependency: nginx-filesystem = 1:1.16.1-1.el7 for package: 1:nginx-1.16.1-1.el7.x86_64
--> Processing Dependency: nginx-filesystem for package: 1:nginx-1.16.1-1.el7.x86_64
--> Processing Dependency: redhat-indexhtml for package: 1:nginx-1.16.1-1.el7.x86_64
--> Processing Dependency: libprofiler.so.0()(64bit) for package: 1:nginx-1.16.1-1.el7.x86_64
--> Running transaction check
---> Package alinux-indexhtml.noarch 0:7-9.4.al7 will be installed
---> Package gperftools-libs.x86_64 0:2.6.1-1.1.al7 will be installed
---> Package nginx-all-modules.noarch 1:1.16.1-1.el7 will be installed
--> Processing Dependency: nginx-mod-http-image-filter = 1:1.16.1-1.el7 for package: 1:nginx-all-modules-1.16.1-1.el7.noarch
--> Processing Dependency: nginx-mod-http-perl = 1:1.16.1-1.el7 for package: 1:nginx-all-modules-1.16.1-1.el7.noarch
--> Processing Dependency: nginx-mod-http-xslt-filter = 1:1.16.1-1.el7 for package: 1:nginx-all-modules-1.16.1-1.el7.noarch
--> Processing Dependency: nginx-mod-mail = 1:1.16.1-1.el7 for package: 1:nginx-all-modules-1.16.1-1.el7.noarch
--> Processing Dependency: nginx-mod-stream = 1:1.16.1-1.el7 for package: 1:nginx-all-modules-1.16.1-1.el7.noarch
---> Package nginx-filesystem.noarch 1:1.16.1-1.el7 will be installed
--> Running transaction check
---> Package nginx-mod-http-image-filter.x86_64 1:1.16.1-1.el7 will be installed
--> Processing Dependency: gd for package: 1:nginx-mod-http-image-filter-1.16.1-1.el7.x86_64
--> Processing Dependency: libgd.so.2()(64bit) for package: 1:nginx-mod-http-image-filter-1.16.1-1.el7.x86_64
---> Package nginx-mod-http-perl.x86_64 1:1.16.1-1.el7 will be installed
---> Package nginx-mod-http-xslt-filter.x86_64 1:1.16.1-1.el7 will be installed
--> Processing Dependency: libxslt.so.1(LIBXML2_1.0.11)(64bit) for package: 1:nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64
--> Processing Dependency: libxslt.so.1(LIBXML2_1.0.18)(64bit) for package: 1:nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64
--> Processing Dependency: libexslt.so.0()(64bit) for package: 1:nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64
--> Processing Dependency: libxslt.so.1()(64bit) for package: 1:nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64
---> Package nginx-mod-mail.x86_64 1:1.16.1-1.el7 will be installed
---> Package nginx-mod-stream.x86_64 1:1.16.1-1.el7 will be installed
--> Running transaction check
---> Package gd.x86_64 0:2.0.35-26.1.al7 will be installed
--> Processing Dependency: libjpeg.so.62(LIBJPEG_6.2)(64bit) for package: gd-2.0.35-26.1.al7.x86_64
--> Processing Dependency: libjpeg.so.62()(64bit) for package: gd-2.0.35-26.1.al7.x86_64
--> Processing Dependency: libfontconfig.so.1()(64bit) for package: gd-2.0.35-26.1.al7.x86_64
--> Processing Dependency: libXpm.so.4()(64bit) for package: gd-2.0.35-26.1.al7.x86_64
--> Processing Dependency: libX11.so.6()(64bit) for package: gd-2.0.35-26.1.al7.x86_64
---> Package libxslt.x86_64 0:1.1.28-5.1.al7 will be installed
--> Running transaction check
---> Package fontconfig.x86_64 0:2.13.0-4.3.1.al7 will be installed
--> Processing Dependency: fontpackages-filesystem for package: fontconfig-2.13.0-4.3.1.al7.x86_64
--> Processing Dependency: dejavu-sans-fonts for package: fontconfig-2.13.0-4.3.1.al7.x86_64
---> Package libX11.x86_64 0:1.6.7-2.1.al7 will be installed
--> Processing Dependency: libX11-common >= 1.6.7-2.1.al7 for package: libX11-1.6.7-2.1.al7.x86_64
--> Processing Dependency: libxcb.so.1()(64bit) for package: libX11-1.6.7-2.1.al7.x86_64
---> Package libXpm.x86_64 0:3.5.12-1.1.al7 will be installed
---> Package libjpeg-turbo.x86_64 0:1.2.90-8.1.al7 will be installed
--> Running transaction check
---> Package dejavu-sans-fonts.noarch 0:2.33-6.2.al7 will be installed
--> Processing Dependency: dejavu-fonts-common = 2.33-6.2.al7 for package: dejavu-sans-fonts-2.33-6.2.al7.noarch
---> Package fontpackages-filesystem.noarch 0:1.44-8.2.al7 will be installed
---> Package libX11-common.noarch 0:1.6.7-2.1.al7 will be installed
---> Package libxcb.x86_64 0:1.13-1.1.al7 will be installed
--> Processing Dependency: libXau.so.6()(64bit) for package: libxcb-1.13-1.1.al7.x86_64
--> Running transaction check
---> Package dejavu-fonts-common.noarch 0:2.33-6.2.al7 will be installed
---> Package libXau.x86_64 0:1.0.8-2.1.1.al7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================
 Package                                                               Arch                                             Versio
==============================================================================================================================
Installing:
 nginx                                                                 x86_64                                           1:1.16
Installing for dependencies:
 alinux-indexhtml                                                      noarch                                           7-9.4.
 dejavu-fonts-common                                                   noarch                                           2.33-6
 dejavu-sans-fonts                                                     noarch                                           2.33-6
 fontconfig                                                            x86_64                                           2.13.0
 fontpackages-filesystem                                               noarch                                           1.44-8
 gd                                                                    x86_64                                           2.0.35
 gperftools-libs                                                       x86_64                                           2.6.1-
 libX11                                                                x86_64                                           1.6.7-
 libX11-common                                                         noarch                                           1.6.7-
 libXau                                                                x86_64                                           1.0.8-
 libXpm                                                                x86_64                                           3.5.12
 libjpeg-turbo                                                         x86_64                                           1.2.90
 libxcb                                                                x86_64                                           1.13-1
 libxslt                                                               x86_64                                           1.1.28
 nginx-all-modules                                                     noarch                                           1:1.16
 nginx-filesystem                                                      noarch                                           1:1.16
 nginx-mod-http-image-filter                                           x86_64                                           1:1.16
 nginx-mod-http-perl                                                   x86_64                                           1:1.16
 nginx-mod-http-xslt-filter                                            x86_64                                           1:1.16
 nginx-mod-mail                                                        x86_64                                           1:1.16
 nginx-mod-stream                                                      x86_64                                           1:1.16

Transaction Summary
==============================================================================================================================
Install  1 Package (+21 Dependent packages)

Total download size: 4.4 M
Installed size: 14 M
Downloading packages:
(1/22): dejavu-fonts-common-2.33-6.2.al7.noarch.rpm                                                                           
(2/22): alinux-indexhtml-7-9.4.al7.noarch.rpm                                                                                 
(3/22): fontconfig-2.13.0-4.3.1.al7.x86_64.rpm                                                                                
(4/22): dejavu-sans-fonts-2.33-6.2.al7.noarch.rpm                                                                             
(5/22): fontpackages-filesystem-1.44-8.2.al7.noarch.rpm                                                                       
(6/22): gd-2.0.35-26.1.al7.x86_64.rpm                                                                                         
(7/22): libXau-1.0.8-2.1.1.al7.x86_64.rpm                                                                                     
(8/22): libXpm-3.5.12-1.1.al7.x86_64.rpm                                                                                      
(9/22): libX11-common-1.6.7-2.1.al7.noarch.rpm                                                                                
(10/22): libX11-1.6.7-2.1.al7.x86_64.rpm                                                                                      
(11/22): libjpeg-turbo-1.2.90-8.1.al7.x86_64.rpm                                                                              
(12/22): libxcb-1.13-1.1.al7.x86_64.rpm                                                                                       
(13/22): gperftools-libs-2.6.1-1.1.al7.x86_64.rpm                                                                             
(14/22): libxslt-1.1.28-5.1.al7.x86_64.rpm                                                                                    
(15/22): nginx-all-modules-1.16.1-1.el7.noarch.rpm                                                                            
(16/22): nginx-filesystem-1.16.1-1.el7.noarch.rpm                                                                             
(17/22): nginx-1.16.1-1.el7.x86_64.rpm                                                                                        
(18/22): nginx-mod-http-image-filter-1.16.1-1.el7.x86_64.rpm                                                                  
(19/22): nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64.rpm                                                                   
(20/22): nginx-mod-http-perl-1.16.1-1.el7.x86_64.rpm                                                                          
(21/22): nginx-mod-mail-1.16.1-1.el7.x86_64.rpm                                                                               
(22/22): nginx-mod-stream-1.16.1-1.el7.x86_64.rpm                                                                             
------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                         
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : fontpackages-filesystem-1.44-8.2.al7.noarch                                                                    
  Installing : dejavu-fonts-common-2.33-6.2.al7.noarch                                                                        
  Installing : dejavu-sans-fonts-2.33-6.2.al7.noarch                                                                          
  Installing : fontconfig-2.13.0-4.3.1.al7.x86_64                                                                             
  Installing : libXau-1.0.8-2.1.1.al7.x86_64                                                                                  
  Installing : libxcb-1.13-1.1.al7.x86_64                                                                                     
  Installing : libxslt-1.1.28-5.1.al7.x86_64                                                                                  
  Installing : libX11-common-1.6.7-2.1.al7.noarch                                                                             
  Installing : libX11-1.6.7-2.1.al7.x86_64                                                                                    
  Installing : libXpm-3.5.12-1.1.al7.x86_64                                                                                   
  Installing : alinux-indexhtml-7-9.4.al7.noarch                                                                              
  Installing : gperftools-libs-2.6.1-1.1.al7.x86_64                                                                           
  Installing : 1:nginx-filesystem-1.16.1-1.el7.noarch                                                                         
  Installing : libjpeg-turbo-1.2.90-8.1.al7.x86_64                                                                            
  Installing : gd-2.0.35-26.1.al7.x86_64                                                                                      
  Installing : 1:nginx-mod-mail-1.16.1-1.el7.x86_64                                                                           
  Installing : 1:nginx-mod-http-perl-1.16.1-1.el7.x86_64                                                                      
  Installing : 1:nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64                                                               
  Installing : 1:nginx-mod-stream-1.16.1-1.el7.x86_64                                                                         
  Installing : 1:nginx-1.16.1-1.el7.x86_64                                                                                    
  Installing : 1:nginx-mod-http-image-filter-1.16.1-1.el7.x86_64                                                              
  Installing : 1:nginx-all-modules-1.16.1-1.el7.noarch                                                                        
  Verifying  : libjpeg-turbo-1.2.90-8.1.al7.x86_64                                                                            
  Verifying  : 1:nginx-filesystem-1.16.1-1.el7.noarch                                                                         
  Verifying  : 1:nginx-mod-mail-1.16.1-1.el7.x86_64                                                                           
  Verifying  : 1:nginx-mod-http-perl-1.16.1-1.el7.x86_64                                                                      
  Verifying  : dejavu-fonts-common-2.33-6.2.al7.noarch                                                                        
  Verifying  : 1:nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64                                                               
  Verifying  : gperftools-libs-2.6.1-1.1.al7.x86_64                                                                           
  Verifying  : libXpm-3.5.12-1.1.al7.x86_64                                                                                   
  Verifying  : alinux-indexhtml-7-9.4.al7.noarch                                                                              
  Verifying  : dejavu-sans-fonts-2.33-6.2.al7.noarch                                                                          
  Verifying  : 1:nginx-mod-stream-1.16.1-1.el7.x86_64                                                                         
  Verifying  : gd-2.0.35-26.1.al7.x86_64                                                                                      
  Verifying  : libX11-1.6.7-2.1.al7.x86_64                                                                                    
  Verifying  : libxcb-1.13-1.1.al7.x86_64                                                                                     
  Verifying  : 1:nginx-1.16.1-1.el7.x86_64                                                                                    
  Verifying  : 1:nginx-all-modules-1.16.1-1.el7.noarch                                                                        
  Verifying  : fontpackages-filesystem-1.44-8.2.al7.noarch                                                                    
  Verifying  : libX11-common-1.6.7-2.1.al7.noarch                                                                             
  Verifying  : 1:nginx-mod-http-image-filter-1.16.1-1.el7.x86_64                                                              
  Verifying  : libxslt-1.1.28-5.1.al7.x86_64                                                                                  
  Verifying  : libXau-1.0.8-2.1.1.al7.x86_64                                                                                  
  Verifying  : fontconfig-2.13.0-4.3.1.al7.x86_64                                                                             

Installed:
  nginx.x86_64 1:1.16.1-1.el7                                                                                                 

Dependency Installed:
  alinux-indexhtml.noarch 0:7-9.4.al7     dejavu-fonts-common.noarch 0:2.33-6.2.al7          dejavu-sans-fonts.noarch 0:2.33-6
  gd.x86_64 0:2.0.35-26.1.al7             gperftools-libs.x86_64 0:2.6.1-1.1.al7             libX11.x86_64 0:1.6.7-2.1.al7    
  libXpm.x86_64 0:3.5.12-1.1.al7          libjpeg-turbo.x86_64 0:1.2.90-8.1.al7              libxcb.x86_64 0:1.13-1.1.al7     
  nginx-filesystem.noarch 1:1.16.1-1.el7  nginx-mod-http-image-filter.x86_64 1:1.16.1-1.el7  nginx-mod-http-perl.x86_64 1:1.16
  nginx-mod-stream.x86_64 1:1.16.1-1.el7 

Complete!
[root@xx yum.repos.d]# export PS1="\[\e[1;32;40m\][\u@\h \W]\\$ \[\e[m\]"
[root@xx yum.repos.d]# vi /etc/nginx/
conf.d/                 fastcgi.conf            fastcgi_params          koi-utf                 mime.types              nginx.
default.d/              fastcgi.conf.default    fastcgi_params.default  koi-win                 mime.types.default      nginx.
[root@xx yum.repos.d]# vi /etc/nginx/
conf.d/                 fastcgi.conf            fastcgi_params          koi-utf                 mime.types              nginx.
default.d/              fastcgi.conf.default    fastcgi_params.default  koi-win                 mime.types.default      nginx.
[root@xx yum.repos.d]# vi /etc/profile
[root@xx yum.repos.d]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.r
-bash: yum-config-manager: command not found
[root@xx yum.repos.d]# yum -y install docker
Loaded plugins: fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 2:1.13.1-102.git7f2769b.1.al7 will be installed
--> Processing Dependency: docker-common = 2:1.13.1-102.git7f2769b.1.al7 for package: 2:docker-1.13.1-102.git7f2769b.1.al7.x86
--> Processing Dependency: docker-client = 2:1.13.1-102.git7f2769b.1.al7 for package: 2:docker-1.13.1-102.git7f2769b.1.al7.x86
--> Running transaction check
---> Package docker-client.x86_64 2:1.13.1-102.git7f2769b.1.al7 will be installed
---> Package docker-common.x86_64 2:1.13.1-102.git7f2769b.1.al7 will be installed
--> Processing Dependency: skopeo-containers >= 1:0.1.26-2 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: oci-umount >= 2:2.3.3-3 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: oci-systemd-hook >= 1:0.1.4-9 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: oci-register-machine >= 1:0-5.13 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: container-storage-setup >= 0.9.0-1 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: container-selinux >= 2:2.51-1 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: atomic-registries for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Running transaction check
---> Package atomic-registries.x86_64 1:1.22.1-26.gitb507039.1.al7 will be installed
--> Processing Dependency: python-yaml for package: 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64
--> Processing Dependency: python-setuptools for package: 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64
--> Processing Dependency: python-pytoml for package: 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64
---> Package container-selinux.noarch 2:2.107-1.1.al7 will be installed
--> Processing Dependency: policycoreutils-python for package: 2:container-selinux-2.107-1.1.al7.noarch
---> Package container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.1.al7 will be installed
---> Package containers-common.x86_64 1:0.1.37-1.1.al7 will be installed
---> Package oci-register-machine.x86_64 1:0-6.git2b44233.1.al7 will be installed
---> Package oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.1.al7 will be installed
--> Processing Dependency: libyajl.so.2()(64bit) for package: 1:oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64
---> Package oci-umount.x86_64 2:2.5-1.1.al7 will be installed
--> Running transaction check
---> Package PyYAML.x86_64 0:3.10-11.1.al7 will be installed
--> Processing Dependency: libyaml-0.so.2()(64bit) for package: PyYAML-3.10-11.1.al7.x86_64
---> Package policycoreutils-python.x86_64 0:2.5-33.1.al7 will be installed
--> Processing Dependency: policycoreutils = 2.5-33.1.al7 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: setools-libs >= 3.3.8-4 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libsemanage-python >= 2.5-14 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: audit-libs-python >= 2.1.3-4 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: python-IPy for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libqpol.so.1(VERS_1.4)(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libqpol.so.1(VERS_1.2)(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libcgroup for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libapol.so.4(VERS_4.0)(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: checkpolicy for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libqpol.so.1()(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libapol.so.4()(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
---> Package python-pytoml.noarch 0:0.1.14-1.git7dea353.1.al7 will be installed
---> Package python-setuptools.noarch 0:0.9.8-7.1.al7 will be installed
--> Processing Dependency: python-backports-ssl_match_hostname for package: python-setuptools-0.9.8-7.1.al7.noarch
---> Package yajl.x86_64 0:2.0.4-4.1.al7 will be installed
--> Running transaction check
---> Package audit-libs-python.x86_64 0:2.8.5-4.1.al7 will be installed
--> Processing Dependency: audit-libs(x86-64) = 2.8.5-4.1.al7 for package: audit-libs-python-2.8.5-4.1.al7.x86_64
---> Package checkpolicy.x86_64 0:2.5-8.1.al7 will be installed
---> Package libcgroup.x86_64 0:0.41-21.1.al7 will be installed
---> Package libsemanage-python.x86_64 0:2.5-14.1.al7 will be installed
---> Package libyaml.x86_64 0:0.1.4-11.1.al7 will be installed
---> Package policycoreutils.x86_64 0:2.5-29.2.al7.1 will be updated
---> Package policycoreutils.x86_64 0:2.5-33.1.al7 will be an update
---> Package python-IPy.noarch 0:0.75-6.1.al7 will be installed
---> Package python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.1.al7 will be installed
--> Processing Dependency: python-ipaddress for package: python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch
--> Processing Dependency: python-backports for package: python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch
---> Package setools-libs.x86_64 0:3.3.8-4.1.al7 will be installed
--> Running transaction check
---> Package audit-libs.x86_64 0:2.8.4-4.1.al7 will be updated
--> Processing Dependency: audit-libs(x86-64) = 2.8.4-4.1.al7 for package: audit-2.8.4-4.1.al7.x86_64
---> Package audit-libs.x86_64 0:2.8.5-4.1.al7 will be an update
---> Package python-backports.x86_64 0:1.0-8.1.al7 will be installed
---> Package python-ipaddress.noarch 0:1.0.16-2.4.al7 will be installed
--> Running transaction check
---> Package audit.x86_64 0:2.8.4-4.1.al7 will be updated
---> Package audit.x86_64 0:2.8.5-4.1.al7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================
 Package                                                                  Arch                                        Version 
==============================================================================================================================
Installing:
 docker                                                                   x86_64                                      2:1.13.1
Installing for dependencies:
 PyYAML                                                                   x86_64                                      3.10-11.
 atomic-registries                                                        x86_64                                      1:1.22.1
 audit-libs-python                                                        x86_64                                      2.8.5-4.
 checkpolicy                                                              x86_64                                      2.5-8.1.
 container-selinux                                                        noarch                                      2:2.107-
 container-storage-setup                                                  noarch                                      0.11.0-2
 containers-common                                                        x86_64                                      1:0.1.37
 docker-client                                                            x86_64                                      2:1.13.1
 docker-common                                                            x86_64                                      2:1.13.1
 libcgroup                                                                x86_64                                      0.41-21.
 libsemanage-python                                                       x86_64                                      2.5-14.1
 libyaml                                                                  x86_64                                      0.1.4-11
 oci-register-machine                                                     x86_64                                      1:0-6.gi
 oci-systemd-hook                                                         x86_64                                      1:0.2.0-
 oci-umount                                                               x86_64                                      2:2.5-1.
 policycoreutils-python                                                   x86_64                                      2.5-33.1
 python-IPy                                                               noarch                                      0.75-6.1
 python-backports                                                         x86_64                                      1.0-8.1.
 python-backports-ssl_match_hostname                                      noarch                                      3.5.0.1-
 python-ipaddress                                                         noarch                                      1.0.16-2
 python-pytoml                                                            noarch                                      0.1.14-1
 python-setuptools                                                        noarch                                      0.9.8-7.
 setools-libs                                                             x86_64                                      3.3.8-4.
 yajl                                                                     x86_64                                      2.0.4-4.
Updating for dependencies:
 audit                                                                    x86_64                                      2.8.5-4.
 audit-libs                                                               x86_64                                      2.8.5-4.
 policycoreutils                                                          x86_64                                      2.5-33.1

Transaction Summary
==============================================================================================================================
Install  1 Package  (+24 Dependent packages)
Upgrade             (  3 Dependent packages)

Total download size: 32 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/28): atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64.rpm                                                               
(2/28): audit-libs-2.8.5-4.1.al7.x86_64.rpm                                                                                   
(3/28): PyYAML-3.10-11.1.al7.x86_64.rpm                                                                                       
(4/28): container-storage-setup-0.11.0-2.git5eaf76c.1.al7.noarch.rpm                                                          
(5/28): checkpolicy-2.5-8.1.al7.x86_64.rpm                                                                                    
(6/28): containers-common-0.1.37-1.1.al7.x86_64.rpm                                                                           
(7/28): audit-2.8.5-4.1.al7.x86_64.rpm                                                                                        
(8/28): container-selinux-2.107-1.1.al7.noarch.rpm                                                                            
(9/28): audit-libs-python-2.8.5-4.1.al7.x86_64.rpm                                                                            
(10/28): docker-client-1.13.1-102.git7f2769b.1.al7.x86_64.rpm                                                                 
(11/28): docker-common-1.13.1-102.git7f2769b.1.al7.x86_64.rpm                                                                 
(12/28): oci-register-machine-0-6.git2b44233.1.al7.x86_64.rpm                                                                 
(13/28): libyaml-0.1.4-11.1.al7.x86_64.rpm                                                                                    
(14/28): oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64.rpm                                                                 
(15/28): libsemanage-python-2.5-14.1.al7.x86_64.rpm                                                                           
(16/28): libcgroup-0.41-21.1.al7.x86_64.rpm                                                                                   
(17/28): oci-umount-2.5-1.1.al7.x86_64.rpm                                                                                    
(18/28): docker-1.13.1-102.git7f2769b.1.al7.x86_64.rpm                                                                        
(19/28): policycoreutils-python-2.5-33.1.al7.x86_64.rpm                                                                       
(20/28): python-backports-1.0-8.1.al7.x86_64.rpm                                                                              
(21/28): python-IPy-0.75-6.1.al7.noarch.rpm                                                                                   
(22/28): python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch.rpm                                                       
(23/28): python-ipaddress-1.0.16-2.4.al7.noarch.rpm                                                                           
(24/28): policycoreutils-2.5-33.1.al7.x86_64.rpm                                                                              
(25/28): python-setuptools-0.9.8-7.1.al7.noarch.rpm                                                                           
(26/28): python-pytoml-0.1.14-1.git7dea353.1.al7.noarch.rpm                                                                   
(27/28): yajl-2.0.4-4.1.al7.x86_64.rpm                                                                                        
(28/28): setools-libs-3.3.8-4.1.al7.x86_64.rpm                                                                                
------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                         
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : audit-libs-2.8.5-4.1.al7.x86_64                                                                                
  Updating   : policycoreutils-2.5-33.1.al7.x86_64                                                                            
  Installing : yajl-2.0.4-4.1.al7.x86_64                                                                                      
  Installing : 2:oci-umount-2.5-1.1.al7.x86_64                                                                                
  Installing : 1:oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64                                                             
  Installing : audit-libs-python-2.8.5-4.1.al7.x86_64                                                                         
  Installing : checkpolicy-2.5-8.1.al7.x86_64                                                                                 
  Installing : python-ipaddress-1.0.16-2.4.al7.noarch                                                                         
  Installing : libyaml-0.1.4-11.1.al7.x86_64                                                                                  
  Installing : PyYAML-3.10-11.1.al7.x86_64                                                                                    
  Installing : 1:oci-register-machine-0-6.git2b44233.1.al7.x86_64                                                             
  Installing : container-storage-setup-0.11.0-2.git5eaf76c.1.al7.noarch                                                       
  Installing : python-pytoml-0.1.14-1.git7dea353.1.al7.noarch                                                                 
  Installing : libcgroup-0.41-21.1.al7.x86_64                                                                                 
  Installing : libsemanage-python-2.5-14.1.al7.x86_64                                                                         
  Installing : python-IPy-0.75-6.1.al7.noarch                                                                                 
  Installing : setools-libs-3.3.8-4.1.al7.x86_64                                                                              
  Installing : policycoreutils-python-2.5-33.1.al7.x86_64                                                                     
  Installing : 2:container-selinux-2.107-1.1.al7.noarch                                                                       
setsebool:  SELinux is disabled.
  Installing : python-backports-1.0-8.1.al7.x86_64                                                                            
  Installing : python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch                                                     
  Installing : python-setuptools-0.9.8-7.1.al7.noarch                                                                         
  Installing : 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64                                                          
  Installing : 1:containers-common-0.1.37-1.1.al7.x86_64                                                                      
  Installing : 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64                                                             
  Installing : 2:docker-client-1.13.1-102.git7f2769b.1.al7.x86_64                                                             
  Installing : 2:docker-1.13.1-102.git7f2769b.1.al7.x86_64                                                                    
  Updating   : audit-2.8.5-4.1.al7.x86_64                                                                                     
  Cleanup    : audit-2.8.4-4.1.al7.x86_64                                                                                     
  Cleanup    : policycoreutils-2.5-29.2.al7.1.x86_64                                                                          
  Cleanup    : audit-libs-2.8.4-4.1.al7.x86_64                                                                                
  Verifying  : 1:containers-common-0.1.37-1.1.al7.x86_64                                                                      
  Verifying  : audit-libs-2.8.5-4.1.al7.x86_64                                                                                
  Verifying  : python-backports-1.0-8.1.al7.x86_64                                                                            
  Verifying  : 2:docker-client-1.13.1-102.git7f2769b.1.al7.x86_64                                                             
  Verifying  : policycoreutils-python-2.5-33.1.al7.x86_64                                                                     
  Verifying  : setools-libs-3.3.8-4.1.al7.x86_64                                                                              
  Verifying  : python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch                                                     
  Verifying  : yajl-2.0.4-4.1.al7.x86_64                                                                                      
  Verifying  : policycoreutils-2.5-33.1.al7.x86_64                                                                            
  Verifying  : python-IPy-0.75-6.1.al7.noarch                                                                                 
  Verifying  : libsemanage-python-2.5-14.1.al7.x86_64                                                                         
  Verifying  : libcgroup-0.41-21.1.al7.x86_64                                                                                 
  Verifying  : audit-2.8.5-4.1.al7.x86_64                                                                                     
  Verifying  : 2:docker-1.13.1-102.git7f2769b.1.al7.x86_64                                                                    
  Verifying  : python-pytoml-0.1.14-1.git7dea353.1.al7.noarch                                                                 
  Verifying  : container-storage-setup-0.11.0-2.git5eaf76c.1.al7.noarch                                                       
  Verifying  : 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64                                                             
  Verifying  : audit-libs-python-2.8.5-4.1.al7.x86_64                                                                         
  Verifying  : 2:oci-umount-2.5-1.1.al7.x86_64                                                                                
  Verifying  : 1:oci-register-machine-0-6.git2b44233.1.al7.x86_64                                                             
  Verifying  : 1:oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64                                                             
  Verifying  : libyaml-0.1.4-11.1.al7.x86_64                                                                                  
  Verifying  : 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64                                                          
  Verifying  : PyYAML-3.10-11.1.al7.x86_64                                                                                    
  Verifying  : python-ipaddress-1.0.16-2.4.al7.noarch                                                                         
  Verifying  : checkpolicy-2.5-8.1.al7.x86_64                                                                                 
  Verifying  : 2:container-selinux-2.107-1.1.al7.noarch                                                                       
  Verifying  : python-setuptools-0.9.8-7.1.al7.noarch                                                                         
  Verifying  : audit-libs-2.8.4-4.1.al7.x86_64                                                                                
  Verifying  : policycoreutils-2.5-29.2.al7.1.x86_64                                                                          
  Verifying  : audit-2.8.4-4.1.al7.x86_64                                                                                     

Installed:
  docker.x86_64 2:1.13.1-102.git7f2769b.1.al7                                                                                 

Dependency Installed:
  PyYAML.x86_64 0:3.10-11.1.al7                         atomic-registries.x86_64 1:1.22.1-26.gitb507039.1.al7         audit-li
  container-selinux.noarch 2:2.107-1.1.al7              container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.1.al7    containe
  docker-common.x86_64 2:1.13.1-102.git7f2769b.1.al7    libcgroup.x86_64 0:0.41-21.1.al7                              libseman
  oci-register-machine.x86_64 1:0-6.git2b44233.1.al7    oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.1.al7            oci-umou
  python-IPy.noarch 0:0.75-6.1.al7                      python-backports.x86_64 0:1.0-8.1.al7                         python-b
  python-pytoml.noarch 0:0.1.14-1.git7dea353.1.al7      python-setuptools.noarch 0:0.9.8-7.1.al7                      setools-

Dependency Updated:
  audit.x86_64 0:2.8.5-4.1.al7                                             audit-libs.x86_64 0:2.8.5-4.1.al7                  

Complete!
[root@xx yum.repos.d]# cat > /etc/docker/daemon.json <<EOF
> {"registry-mirrors": ["https://ts0bavkb.mirror.aliyuncs.com"]}
> EOF
[root@xx yum.repos.d]# systemctl start docker
[root@xx yum.repos.d]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@xx yum.repos.d]# docker run -dit --restart=always --name=cboard -p 8026:8080 --privileged=true peterzhang921/cboard:0.4.1 /opt/apache-tomcat/bin/catalina.sh run
Unable to find image 'peterzhang921/cboard:0.4.1' locally
Trying to pull repository docker.io/peterzhang921/cboard ... 
0.4.1: Pulling from docker.io/peterzhang921/cboard
993c50d47469: Pull complete 
af4e8a8bb24f: Pull complete 
0a9b05b457d3: Pull complete 
6c3f3e86a749: Pull complete 
287c5d44fad6: Pull complete 
48595c46d891: Pull complete 
5755c544c060: Pull complete 
9c9ead5cdaf0: Pull complete 
9841b0fc949a: Pull complete 
Digest: sha256:90a7b8f933af438b88066e050de04fe0923ede3a8cf0c54e2080ca2e4dc31339
Status: Downloaded newer image for docker.io/peterzhang921/cboard:0.4.1
d52e337919904c0c9d284698c0cfd651b076ce48b39c777521d7b64d8288ca23
[root@xx yum.repos.d]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                           PORTS               NAMES
d52e33791990        peterzhang921/cboard:0.4.1   "/opt/apache-tomca..."   17 seconds ago      Restarting (139) 2 seconds ago                       cboard

@litongjava
Copy link
Author

litongjava commented Nov 22, 2019

后来我重置了操作系统,没有设置yum 源,直接安装docker,启动容器错误依旧如上

Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.


Welcome to Alibaba Cloud Elastic Compute Service !

[root@xx ~]# yum -y insall docker
Loaded plugins: fastestmirror
No such command: insall. Please use /usr/bin/yum --help
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# yum -y install docker
Loaded plugins: fastestmirror
Determining fastest mirrors
base                                                                                                                                                                                                                 | 3.1 kB  00:00:00     
extras                                                                                                                                                                                                               | 2.5 kB  00:00:00     
plus                                                                                                                                                                                                                 | 2.5 kB  00:00:00     
updates                                                                                                                                                                                                              | 2.5 kB  00:00:00     
(1/5): base/2.1903/x86_64/group_gz                                                                                                                                                                                   | 101 kB  00:00:00     
(2/5): extras/2.1903/x86_64/primary_db                                                                                                                                                                               | 101 kB  00:00:00     
(3/5): plus/2.1903/x86_64/primary_db                                                                                                                                                                                 | 1.2 MB  00:00:00     
(4/5): updates/2.1903/x86_64/primary_db                                                                                                                                                                              | 2.1 MB  00:00:00     
(5/5): base/2.1903/x86_64/primary_db                                                                                                                                                                                 | 4.9 MB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 2:1.13.1-102.git7f2769b.1.al7 will be installed
--> Processing Dependency: docker-common = 2:1.13.1-102.git7f2769b.1.al7 for package: 2:docker-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: docker-client = 2:1.13.1-102.git7f2769b.1.al7 for package: 2:docker-1.13.1-102.git7f2769b.1.al7.x86_64
--> Running transaction check
---> Package docker-client.x86_64 2:1.13.1-102.git7f2769b.1.al7 will be installed
---> Package docker-common.x86_64 2:1.13.1-102.git7f2769b.1.al7 will be installed
--> Processing Dependency: skopeo-containers >= 1:0.1.26-2 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: oci-umount >= 2:2.3.3-3 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: oci-systemd-hook >= 1:0.1.4-9 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: oci-register-machine >= 1:0-5.13 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: container-storage-setup >= 0.9.0-1 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: container-selinux >= 2:2.51-1 for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Processing Dependency: atomic-registries for package: 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64
--> Running transaction check
---> Package atomic-registries.x86_64 1:1.22.1-26.gitb507039.1.al7 will be installed
--> Processing Dependency: python-yaml for package: 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64
--> Processing Dependency: python-setuptools for package: 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64
--> Processing Dependency: python-pytoml for package: 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64
---> Package container-selinux.noarch 2:2.107-1.1.al7 will be installed
--> Processing Dependency: policycoreutils-python for package: 2:container-selinux-2.107-1.1.al7.noarch
---> Package container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.1.al7 will be installed
---> Package containers-common.x86_64 1:0.1.37-1.1.al7 will be installed
---> Package oci-register-machine.x86_64 1:0-6.git2b44233.1.al7 will be installed
---> Package oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.1.al7 will be installed
--> Processing Dependency: libyajl.so.2()(64bit) for package: 1:oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64
---> Package oci-umount.x86_64 2:2.5-1.1.al7 will be installed
--> Running transaction check
---> Package PyYAML.x86_64 0:3.10-11.1.al7 will be installed
--> Processing Dependency: libyaml-0.so.2()(64bit) for package: PyYAML-3.10-11.1.al7.x86_64
---> Package policycoreutils-python.x86_64 0:2.5-33.1.al7 will be installed
--> Processing Dependency: policycoreutils = 2.5-33.1.al7 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: setools-libs >= 3.3.8-4 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libsemanage-python >= 2.5-14 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: audit-libs-python >= 2.1.3-4 for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: python-IPy for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libqpol.so.1(VERS_1.4)(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libqpol.so.1(VERS_1.2)(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libcgroup for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libapol.so.4(VERS_4.0)(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: checkpolicy for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libqpol.so.1()(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
--> Processing Dependency: libapol.so.4()(64bit) for package: policycoreutils-python-2.5-33.1.al7.x86_64
---> Package python-pytoml.noarch 0:0.1.14-1.git7dea353.1.al7 will be installed
---> Package python-setuptools.noarch 0:0.9.8-7.1.al7 will be installed
--> Processing Dependency: python-backports-ssl_match_hostname for package: python-setuptools-0.9.8-7.1.al7.noarch
---> Package yajl.x86_64 0:2.0.4-4.1.al7 will be installed
--> Running transaction check
---> Package audit-libs-python.x86_64 0:2.8.5-4.1.al7 will be installed
--> Processing Dependency: audit-libs(x86-64) = 2.8.5-4.1.al7 for package: audit-libs-python-2.8.5-4.1.al7.x86_64
---> Package checkpolicy.x86_64 0:2.5-8.1.al7 will be installed
---> Package libcgroup.x86_64 0:0.41-21.1.al7 will be installed
---> Package libsemanage-python.x86_64 0:2.5-14.1.al7 will be installed
---> Package libyaml.x86_64 0:0.1.4-11.1.al7 will be installed
---> Package policycoreutils.x86_64 0:2.5-29.2.al7.1 will be updated
---> Package policycoreutils.x86_64 0:2.5-33.1.al7 will be an update
---> Package python-IPy.noarch 0:0.75-6.1.al7 will be installed
---> Package python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.1.al7 will be installed
--> Processing Dependency: python-ipaddress for package: python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch
--> Processing Dependency: python-backports for package: python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch
---> Package setools-libs.x86_64 0:3.3.8-4.1.al7 will be installed
--> Running transaction check
---> Package audit-libs.x86_64 0:2.8.4-4.1.al7 will be updated
--> Processing Dependency: audit-libs(x86-64) = 2.8.4-4.1.al7 for package: audit-2.8.4-4.1.al7.x86_64
---> Package audit-libs.x86_64 0:2.8.5-4.1.al7 will be an update
---> Package python-backports.x86_64 0:1.0-8.1.al7 will be installed
---> Package python-ipaddress.noarch 0:1.0.16-2.4.al7 will be installed
--> Running transaction check
---> Package audit.x86_64 0:2.8.4-4.1.al7 will be updated
---> Package audit.x86_64 0:2.8.5-4.1.al7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================================================================
 Package                                                                  Arch                                        Version                                                            Repository                                    Size
============================================================================================================================================================================================================================================
Installing:
 docker                                                                   x86_64                                      2:1.13.1-102.git7f2769b.1.al7                                      extras                                        22 M
Installing for dependencies:
 PyYAML                                                                   x86_64                                      3.10-11.1.al7                                                      base                                         153 k
 atomic-registries                                                        x86_64                                      1:1.22.1-26.gitb507039.1.al7                                       extras                                        35 k
 audit-libs-python                                                        x86_64                                      2.8.5-4.1.al7                                                      updates                                       77 k
 checkpolicy                                                              x86_64                                      2.5-8.1.al7                                                        base                                         295 k
 container-selinux                                                        noarch                                      2:2.107-1.1.al7                                                    extras                                        39 k
 container-storage-setup                                                  noarch                                      0.11.0-2.git5eaf76c.1.al7                                          extras                                        35 k
 containers-common                                                        x86_64                                      1:0.1.37-1.1.al7                                                   extras                                        21 k
 docker-client                                                            x86_64                                      2:1.13.1-102.git7f2769b.1.al7                                      extras                                       4.9 M
 docker-common                                                            x86_64                                      2:1.13.1-102.git7f2769b.1.al7                                      extras                                        97 k
 libcgroup                                                                x86_64                                      0.41-21.1.al7                                                      updates                                       66 k
 libsemanage-python                                                       x86_64                                      2.5-14.1.al7                                                       base                                         113 k
 libyaml                                                                  x86_64                                      0.1.4-11.1.al7                                                     base                                          55 k
 oci-register-machine                                                     x86_64                                      1:0-6.git2b44233.1.al7                                             extras                                       1.4 M
 oci-systemd-hook                                                         x86_64                                      1:0.2.0-1.git05e6923.1.al7                                         extras                                        34 k
 oci-umount                                                               x86_64                                      2:2.5-1.1.al7                                                      extras                                        33 k
 policycoreutils-python                                                   x86_64                                      2.5-33.1.al7                                                       updates                                      457 k
 python-IPy                                                               noarch                                      0.75-6.1.al7                                                       base                                          32 k
 python-backports                                                         x86_64                                      1.0-8.1.al7                                                        base                                         5.8 k
 python-backports-ssl_match_hostname                                      noarch                                      3.5.0.1-1.1.al7                                                    base                                          13 k
 python-ipaddress                                                         noarch                                      1.0.16-2.4.al7                                                     base                                          34 k
 python-pytoml                                                            noarch                                      0.1.14-1.git7dea353.1.al7                                          extras                                        18 k
 python-setuptools                                                        noarch                                      0.9.8-7.1.al7                                                      base                                         397 k
 setools-libs                                                             x86_64                                      3.3.8-4.1.al7                                                      base                                         620 k
 yajl                                                                     x86_64                                      2.0.4-4.1.al7                                                      base                                          39 k
Updating for dependencies:
 audit                                                                    x86_64                                      2.8.5-4.1.al7                                                      updates                                      256 k
 audit-libs                                                               x86_64                                      2.8.5-4.1.al7                                                      updates                                      102 k
 policycoreutils                                                          x86_64                                      2.5-33.1.al7                                                       updates                                      916 k

Transaction Summary
============================================================================================================================================================================================================================================
Install  1 Package  (+24 Dependent packages)
Upgrade             (  3 Dependent packages)

Total download size: 32 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/28): PyYAML-3.10-11.1.al7.x86_64.rpm                                                                                                                                                                              | 153 kB  00:00:00     
(2/28): audit-2.8.5-4.1.al7.x86_64.rpm                                                                                                                                                                               | 256 kB  00:00:00     
(3/28): audit-libs-python-2.8.5-4.1.al7.x86_64.rpm                                                                                                                                                                   |  77 kB  00:00:00     
(4/28): audit-libs-2.8.5-4.1.al7.x86_64.rpm                                                                                                                                                                          | 102 kB  00:00:00     
(5/28): atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64.rpm                                                                                                                                                      |  35 kB  00:00:00     
(6/28): container-storage-setup-0.11.0-2.git5eaf76c.1.al7.noarch.rpm                                                                                                                                                 |  35 kB  00:00:00     
(7/28): containers-common-0.1.37-1.1.al7.x86_64.rpm                                                                                                                                                                  |  21 kB  00:00:00     
(8/28): checkpolicy-2.5-8.1.al7.x86_64.rpm                                                                                                                                                                           | 295 kB  00:00:00     
(9/28): container-selinux-2.107-1.1.al7.noarch.rpm                                                                                                                                                                   |  39 kB  00:00:00     
(10/28): docker-client-1.13.1-102.git7f2769b.1.al7.x86_64.rpm                                                                                                                                                        | 4.9 MB  00:00:00     
(11/28): docker-common-1.13.1-102.git7f2769b.1.al7.x86_64.rpm                                                                                                                                                        |  97 kB  00:00:00     
(12/28): libcgroup-0.41-21.1.al7.x86_64.rpm                                                                                                                                                                          |  66 kB  00:00:00     
(13/28): oci-register-machine-0-6.git2b44233.1.al7.x86_64.rpm                                                                                                                                                        | 1.4 MB  00:00:00     
(14/28): libyaml-0.1.4-11.1.al7.x86_64.rpm                                                                                                                                                                           |  55 kB  00:00:00     
(15/28): docker-1.13.1-102.git7f2769b.1.al7.x86_64.rpm                                                                                                                                                               |  22 MB  00:00:00     
(16/28): libsemanage-python-2.5-14.1.al7.x86_64.rpm                                                                                                                                                                  | 113 kB  00:00:00     
(17/28): oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64.rpm                                                                                                                                                        |  34 kB  00:00:00     
(18/28): python-IPy-0.75-6.1.al7.noarch.rpm                                                                                                                                                                          |  32 kB  00:00:00     
(19/28): oci-umount-2.5-1.1.al7.x86_64.rpm                                                                                                                                                                           |  33 kB  00:00:00     
(20/28): python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch.rpm                                                                                                                                              |  13 kB  00:00:00     
(21/28): python-ipaddress-1.0.16-2.4.al7.noarch.rpm                                                                                                                                                                  |  34 kB  00:00:00     
(22/28): python-setuptools-0.9.8-7.1.al7.noarch.rpm                                                                                                                                                                  | 397 kB  00:00:00     
(23/28): setools-libs-3.3.8-4.1.al7.x86_64.rpm                                                                                                                                                                       | 620 kB  00:00:00     
(24/28): python-backports-1.0-8.1.al7.x86_64.rpm                                                                                                                                                                     | 5.8 kB  00:00:00     
(25/28): python-pytoml-0.1.14-1.git7dea353.1.al7.noarch.rpm                                                                                                                                                          |  18 kB  00:00:00     
(26/28): policycoreutils-python-2.5-33.1.al7.x86_64.rpm                                                                                                                                                              | 457 kB  00:00:00     
(27/28): yajl-2.0.4-4.1.al7.x86_64.rpm                                                                                                                                                                               |  39 kB  00:00:00     
(28/28): policycoreutils-2.5-33.1.al7.x86_64.rpm                                                                                                                                                                     | 916 kB  00:00:00     
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                                        29 MB/s |  32 MB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : audit-libs-2.8.5-4.1.al7.x86_64                                                                                                                                                                                         1/31 
  Updating   : policycoreutils-2.5-33.1.al7.x86_64                                                                                                                                                                                     2/31 
  Installing : yajl-2.0.4-4.1.al7.x86_64                                                                                                                                                                                               3/31 
  Installing : 2:oci-umount-2.5-1.1.al7.x86_64                                                                                                                                                                                         4/31 
  Installing : 1:oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64                                                                                                                                                                      5/31 
  Installing : audit-libs-python-2.8.5-4.1.al7.x86_64                                                                                                                                                                                  6/31 
  Installing : checkpolicy-2.5-8.1.al7.x86_64                                                                                                                                                                                          7/31 
  Installing : python-ipaddress-1.0.16-2.4.al7.noarch                                                                                                                                                                                  8/31 
  Installing : libyaml-0.1.4-11.1.al7.x86_64                                                                                                                                                                                           9/31 
  Installing : PyYAML-3.10-11.1.al7.x86_64                                                                                                                                                                                            10/31 
  Installing : 1:oci-register-machine-0-6.git2b44233.1.al7.x86_64                                                                                                                                                                     11/31 
  Installing : container-storage-setup-0.11.0-2.git5eaf76c.1.al7.noarch                                                                                                                                                               12/31 
  Installing : python-pytoml-0.1.14-1.git7dea353.1.al7.noarch                                                                                                                                                                         13/31 
  Installing : libcgroup-0.41-21.1.al7.x86_64                                                                                                                                                                                         14/31 
  Installing : libsemanage-python-2.5-14.1.al7.x86_64                                                                                                                                                                                 15/31 
  Installing : python-IPy-0.75-6.1.al7.noarch                                                                                                                                                                                         16/31 
  Installing : setools-libs-3.3.8-4.1.al7.x86_64                                                                                                                                                                                      17/31 
  Installing : policycoreutils-python-2.5-33.1.al7.x86_64                                                                                                                                                                             18/31 
  Installing : 2:container-selinux-2.107-1.1.al7.noarch                                                                                                                                                                               19/31 
setsebool:  SELinux is disabled.
  Installing : python-backports-1.0-8.1.al7.x86_64                                                                                                                                                                                    20/31 
  Installing : python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch                                                                                                                                                             21/31 
  Installing : python-setuptools-0.9.8-7.1.al7.noarch                                                                                                                                                                                 22/31 
  Installing : 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64                                                                                                                                                                  23/31 
  Installing : 1:containers-common-0.1.37-1.1.al7.x86_64                                                                                                                                                                              24/31 
  Installing : 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64                                                                                                                                                                     25/31 
  Installing : 2:docker-client-1.13.1-102.git7f2769b.1.al7.x86_64                                                                                                                                                                     26/31 
  Installing : 2:docker-1.13.1-102.git7f2769b.1.al7.x86_64                                                                                                                                                                            27/31 
  Updating   : audit-2.8.5-4.1.al7.x86_64                                                                                                                                                                                             28/31 
  Cleanup    : audit-2.8.4-4.1.al7.x86_64                                                                                                                                                                                             29/31 
  Cleanup    : policycoreutils-2.5-29.2.al7.1.x86_64                                                                                                                                                                                  30/31 
  Cleanup    : audit-libs-2.8.4-4.1.al7.x86_64                                                                                                                                                                                        31/31 
  Verifying  : 1:containers-common-0.1.37-1.1.al7.x86_64                                                                                                                                                                               1/31 
  Verifying  : audit-libs-2.8.5-4.1.al7.x86_64                                                                                                                                                                                         2/31 
  Verifying  : python-backports-1.0-8.1.al7.x86_64                                                                                                                                                                                     3/31 
  Verifying  : 2:docker-client-1.13.1-102.git7f2769b.1.al7.x86_64                                                                                                                                                                      4/31 
  Verifying  : policycoreutils-python-2.5-33.1.al7.x86_64                                                                                                                                                                              5/31 
  Verifying  : setools-libs-3.3.8-4.1.al7.x86_64                                                                                                                                                                                       6/31 
  Verifying  : python-backports-ssl_match_hostname-3.5.0.1-1.1.al7.noarch                                                                                                                                                              7/31 
  Verifying  : yajl-2.0.4-4.1.al7.x86_64                                                                                                                                                                                               8/31 
  Verifying  : policycoreutils-2.5-33.1.al7.x86_64                                                                                                                                                                                     9/31 
  Verifying  : python-IPy-0.75-6.1.al7.noarch                                                                                                                                                                                         10/31 
  Verifying  : libsemanage-python-2.5-14.1.al7.x86_64                                                                                                                                                                                 11/31 
  Verifying  : libcgroup-0.41-21.1.al7.x86_64                                                                                                                                                                                         12/31 
  Verifying  : audit-2.8.5-4.1.al7.x86_64                                                                                                                                                                                             13/31 
  Verifying  : 2:docker-1.13.1-102.git7f2769b.1.al7.x86_64                                                                                                                                                                            14/31 
  Verifying  : python-pytoml-0.1.14-1.git7dea353.1.al7.noarch                                                                                                                                                                         15/31 
  Verifying  : container-storage-setup-0.11.0-2.git5eaf76c.1.al7.noarch                                                                                                                                                               16/31 
  Verifying  : 2:docker-common-1.13.1-102.git7f2769b.1.al7.x86_64                                                                                                                                                                     17/31 
  Verifying  : audit-libs-python-2.8.5-4.1.al7.x86_64                                                                                                                                                                                 18/31 
  Verifying  : 2:oci-umount-2.5-1.1.al7.x86_64                                                                                                                                                                                        19/31 
  Verifying  : 1:oci-register-machine-0-6.git2b44233.1.al7.x86_64                                                                                                                                                                     20/31 
  Verifying  : 1:oci-systemd-hook-0.2.0-1.git05e6923.1.al7.x86_64                                                                                                                                                                     21/31 
  Verifying  : libyaml-0.1.4-11.1.al7.x86_64                                                                                                                                                                                          22/31 
  Verifying  : 1:atomic-registries-1.22.1-26.gitb507039.1.al7.x86_64                                                                                                                                                                  23/31 
  Verifying  : PyYAML-3.10-11.1.al7.x86_64                                                                                                                                                                                            24/31 
  Verifying  : python-ipaddress-1.0.16-2.4.al7.noarch                                                                                                                                                                                 25/31 
  Verifying  : checkpolicy-2.5-8.1.al7.x86_64                                                                                                                                                                                         26/31 
  Verifying  : 2:container-selinux-2.107-1.1.al7.noarch                                                                                                                                                                               27/31 
  Verifying  : python-setuptools-0.9.8-7.1.al7.noarch                                                                                                                                                                                 28/31 
  Verifying  : audit-libs-2.8.4-4.1.al7.x86_64                                                                                                                                                                                        29/31 
  Verifying  : policycoreutils-2.5-29.2.al7.1.x86_64                                                                                                                                                                                  30/31 
  Verifying  : audit-2.8.4-4.1.al7.x86_64                                                                                                                                                                                             31/31 

Installed:
  docker.x86_64 2:1.13.1-102.git7f2769b.1.al7                                                                                                                                                                                               

Dependency Installed:
  PyYAML.x86_64 0:3.10-11.1.al7                         atomic-registries.x86_64 1:1.22.1-26.gitb507039.1.al7         audit-libs-python.x86_64 0:2.8.5-4.1.al7                        checkpolicy.x86_64 0:2.5-8.1.al7                     
  container-selinux.noarch 2:2.107-1.1.al7              container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.1.al7    containers-common.x86_64 1:0.1.37-1.1.al7                       docker-client.x86_64 2:1.13.1-102.git7f2769b.1.al7   
  docker-common.x86_64 2:1.13.1-102.git7f2769b.1.al7    libcgroup.x86_64 0:0.41-21.1.al7                              libsemanage-python.x86_64 0:2.5-14.1.al7                        libyaml.x86_64 0:0.1.4-11.1.al7                      
  oci-register-machine.x86_64 1:0-6.git2b44233.1.al7    oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.1.al7            oci-umount.x86_64 2:2.5-1.1.al7                                 policycoreutils-python.x86_64 0:2.5-33.1.al7         
  python-IPy.noarch 0:0.75-6.1.al7                      python-backports.x86_64 0:1.0-8.1.al7                         python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.1.al7    python-ipaddress.noarch 0:1.0.16-2.4.al7             
  python-pytoml.noarch 0:0.1.14-1.git7dea353.1.al7      python-setuptools.noarch 0:0.9.8-7.1.al7                      setools-libs.x86_64 0:3.3.8-4.1.al7                             yajl.x86_64 0:2.0.4-4.1.al7                          

Dependency Updated:
  audit.x86_64 0:2.8.5-4.1.al7                                             audit-libs.x86_64 0:2.8.5-4.1.al7                                             policycoreutils.x86_64 0:2.5-33.1.al7                                            

Complete!
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# cat > /etc/docker/daemon.json <<EOF
> {"registry-mirrors": ["https://ts0bavkb.mirror.aliyuncs.com"]}
> EOF
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# systemctl start docker
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker run -dit --restart=always --name=cboard -p 8026:8080 --privileged=true peterzhang921/cboard:0.4.1 /opt/apache-tomcat/bin/catalina.sh run
Unable to find image 'peterzhang921/cboard:0.4.1' locally
Trying to pull repository docker.io/peterzhang921/cboard ... 
0.4.1: Pulling from docker.io/peterzhang921/cboard
993c50d47469: Pull complete 
af4e8a8bb24f: Pull complete 
0a9b05b457d3: Pull complete 
6c3f3e86a749: Pull complete 
287c5d44fad6: Pull complete 
48595c46d891: Pull complete 
5755c544c060: Pull complete 
9c9ead5cdaf0: Pull complete 
9841b0fc949a: Pull complete 
Digest: sha256:90a7b8f933af438b88066e050de04fe0923ede3a8cf0c54e2080ca2e4dc31339
Status: Downloaded newer image for docker.io/peterzhang921/cboard:0.4.1
c9f12d834856bf6e99cdf46be61d6304e68a8b749a25e566ff62205181bef65c
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS                            PORTS               NAMES
c9f12d834856        peterzhang921/cboard:0.4.1   "/opt/apache-tomca..."   42 seconds ago      Restarting (139) 14 seconds ago                       cboard
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker logs -f cboard
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker run -dit --restart=always --privileged=true peterzhang921/cboard:0.4.1 /bin/sh
53250b8254884f616d362f4682d3e93121c4fbe3cb55487e49b5c5a6b5e1d42d
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED              STATUS                                    PORTS               NAMES
53250b825488        peterzhang921/cboard:0.4.1   "/bin/sh"                3 seconds ago        Restarting (139) Less than a second ago                       sharp_engelbart
c9f12d834856        peterzhang921/cboard:0.4.1   "/opt/apache-tomca..."   About a minute ago   Restarting (139) 14 seconds ago                               cboard

@litongjava
Copy link
Author

后来.我将操作系统换成了CentOS-7.6,,安装过程如下,安装完成

Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.


Welcome to Alibaba Cloud Elastic Compute Service !

[root@xx ~]# yum -y install docker
Loaded plugins: fastestmirror
Determining fastest mirrors
base                                                                                                                                                                                                                 | 3.6 kB  00:00:00     
epel                                                                                                                                                                                                                 | 5.3 kB  00:00:00     
extras                                                                                                                                                                                                               | 2.9 kB  00:00:00     
updates                                                                                                                                                                                                              | 2.9 kB  00:00:00     
(1/7): epel/x86_64/group_gz                                                                                                                                                                                          |  90 kB  00:00:00     
(2/7): extras/7/x86_64/primary_db                                                                                                                                                                                    | 153 kB  00:00:00     
(3/7): epel/x86_64/primary_db                                                                                                                                                                                        | 6.9 MB  00:00:00     
(4/7): updates/7/x86_64/primary_db                                                                                                                                                                                   | 4.2 MB  00:00:00     
(5/7): base/7/x86_64/primary_db                                                                                                                                                                                      | 6.0 MB  00:00:00     
(6/7): base/7/x86_64/group_gz                                                                                                                                                                                        | 165 kB  00:00:00     
(7/7): epel/x86_64/updateinfo                                                                                                                                                                                        | 1.0 MB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 2:1.13.1-103.git7f2769b.el7.centos will be installed
--> Processing Dependency: docker-common = 2:1.13.1-103.git7f2769b.el7.centos for package: 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: docker-client = 2:1.13.1-103.git7f2769b.el7.centos for package: 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: subscription-manager-rhsm-certificates for package: 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Running transaction check
---> Package docker-client.x86_64 2:1.13.1-103.git7f2769b.el7.centos will be installed
---> Package docker-common.x86_64 2:1.13.1-103.git7f2769b.el7.centos will be installed
--> Processing Dependency: skopeo-containers >= 1:0.1.26-2 for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: oci-umount >= 2:2.3.3-3 for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: oci-systemd-hook >= 1:0.1.4-9 for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: oci-register-machine >= 1:0-5.13 for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: lvm2 >= 2.02.112 for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: container-storage-setup >= 0.9.0-1 for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: container-selinux >= 2:2.51-1 for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
--> Processing Dependency: atomic-registries for package: 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64
---> Package subscription-manager-rhsm-certificates.x86_64 0:1.24.13-3.el7.centos will be installed
--> Running transaction check
---> Package atomic-registries.x86_64 1:1.22.1-29.gitb507039.el7 will be installed
--> Processing Dependency: python-yaml for package: 1:atomic-registries-1.22.1-29.gitb507039.el7.x86_64
--> Processing Dependency: python-setuptools for package: 1:atomic-registries-1.22.1-29.gitb507039.el7.x86_64
--> Processing Dependency: python-pytoml for package: 1:atomic-registries-1.22.1-29.gitb507039.el7.x86_64
---> Package container-selinux.noarch 2:2.107-3.el7 will be installed
--> Processing Dependency: policycoreutils-python for package: 2:container-selinux-2.107-3.el7.noarch
---> Package container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.el7 will be installed
---> Package containers-common.x86_64 1:0.1.37-3.el7.centos will be installed
---> Package lvm2.x86_64 7:2.02.185-2.el7_7.2 will be installed
--> Processing Dependency: lvm2-libs = 7:2.02.185-2.el7_7.2 for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: device-mapper-persistent-data >= 0.7.0-0.1.rc6 for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: liblvm2app.so.2.2(Base)(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02(Base)(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libaio.so.1(LIBAIO_0.4)(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libaio.so.1(LIBAIO_0.1)(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: liblvm2app.so.2.2()(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libdevmapper-event.so.1.02()(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
--> Processing Dependency: libaio.so.1()(64bit) for package: 7:lvm2-2.02.185-2.el7_7.2.x86_64
---> Package oci-register-machine.x86_64 1:0-6.git2b44233.el7 will be installed
---> Package oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.el7_6 will be installed
--> Processing Dependency: libyajl.so.2()(64bit) for package: 1:oci-systemd-hook-0.2.0-1.git05e6923.el7_6.x86_64
---> Package oci-umount.x86_64 2:2.5-3.el7 will be installed
--> Running transaction check
---> Package PyYAML.x86_64 0:3.10-11.el7 will be installed
--> Processing Dependency: libyaml-0.so.2()(64bit) for package: PyYAML-3.10-11.el7.x86_64
---> Package device-mapper-event-libs.x86_64 7:1.02.158-2.el7_7.2 will be installed
---> Package device-mapper-persistent-data.x86_64 0:0.8.5-1.el7 will be installed
---> Package libaio.x86_64 0:0.3.109-13.el7 will be installed
---> Package lvm2-libs.x86_64 7:2.02.185-2.el7_7.2 will be installed
--> Processing Dependency: device-mapper-event = 7:1.02.158-2.el7_7.2 for package: 7:lvm2-libs-2.02.185-2.el7_7.2.x86_64
---> Package policycoreutils-python.x86_64 0:2.5-33.el7 will be installed
--> Processing Dependency: policycoreutils = 2.5-33.el7 for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: setools-libs >= 3.3.8-4 for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: libsemanage-python >= 2.5-14 for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: audit-libs-python >= 2.1.3-4 for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: python-IPy for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: libqpol.so.1(VERS_1.4)(64bit) for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: libqpol.so.1(VERS_1.2)(64bit) for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: libcgroup for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: libapol.so.4(VERS_4.0)(64bit) for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: checkpolicy for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: libqpol.so.1()(64bit) for package: policycoreutils-python-2.5-33.el7.x86_64
--> Processing Dependency: libapol.so.4()(64bit) for package: policycoreutils-python-2.5-33.el7.x86_64
---> Package python-pytoml.noarch 0:0.1.14-1.git7dea353.el7 will be installed
---> Package python-setuptools.noarch 0:0.9.8-7.el7 will be installed
--> Processing Dependency: python-backports-ssl_match_hostname for package: python-setuptools-0.9.8-7.el7.noarch
---> Package yajl.x86_64 0:2.0.4-4.el7 will be installed
--> Running transaction check
---> Package audit-libs-python.x86_64 0:2.8.5-4.el7 will be installed
--> Processing Dependency: audit-libs(x86-64) = 2.8.5-4.el7 for package: audit-libs-python-2.8.5-4.el7.x86_64
---> Package checkpolicy.x86_64 0:2.5-8.el7 will be installed
---> Package device-mapper-event.x86_64 7:1.02.158-2.el7_7.2 will be installed
--> Processing Dependency: device-mapper = 7:1.02.158-2.el7_7.2 for package: 7:device-mapper-event-1.02.158-2.el7_7.2.x86_64
---> Package libcgroup.x86_64 0:0.41-21.el7 will be installed
---> Package libsemanage-python.x86_64 0:2.5-14.el7 will be installed
---> Package libyaml.x86_64 0:0.1.4-11.el7_0 will be installed
---> Package policycoreutils.x86_64 0:2.5-29.el7_6.1 will be updated
---> Package policycoreutils.x86_64 0:2.5-33.el7 will be an update
---> Package python-IPy.noarch 0:0.75-6.el7 will be installed
---> Package python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7 will be installed
--> Processing Dependency: python-ipaddress for package: python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch
--> Processing Dependency: python-backports for package: python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch
---> Package setools-libs.x86_64 0:3.3.8-4.el7 will be installed
--> Running transaction check
---> Package audit-libs.x86_64 0:2.8.4-4.el7 will be updated
--> Processing Dependency: audit-libs(x86-64) = 2.8.4-4.el7 for package: audit-2.8.4-4.el7.x86_64
---> Package audit-libs.x86_64 0:2.8.5-4.el7 will be an update
---> Package device-mapper.x86_64 7:1.02.149-10.el7_6.8 will be updated
--> Processing Dependency: device-mapper = 7:1.02.149-10.el7_6.8 for package: 7:device-mapper-libs-1.02.149-10.el7_6.8.x86_64
---> Package device-mapper.x86_64 7:1.02.158-2.el7_7.2 will be an update
---> Package python-backports.x86_64 0:1.0-8.el7 will be installed
---> Package python-ipaddress.noarch 0:1.0.16-2.el7 will be installed
--> Running transaction check
---> Package audit.x86_64 0:2.8.4-4.el7 will be updated
---> Package audit.x86_64 0:2.8.5-4.el7 will be an update
---> Package device-mapper-libs.x86_64 7:1.02.149-10.el7_6.8 will be updated
---> Package device-mapper-libs.x86_64 7:1.02.158-2.el7_7.2 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================================================================
 Package                                                                   Arch                                      Version                                                               Repository                                  Size
============================================================================================================================================================================================================================================
Installing:
 docker                                                                    x86_64                                    2:1.13.1-103.git7f2769b.el7.centos                                    extras                                      18 M
Installing for dependencies:
 PyYAML                                                                    x86_64                                    3.10-11.el7                                                           base                                       153 k
 atomic-registries                                                         x86_64                                    1:1.22.1-29.gitb507039.el7                                            extras                                      35 k
 audit-libs-python                                                         x86_64                                    2.8.5-4.el7                                                           base                                        76 k
 checkpolicy                                                               x86_64                                    2.5-8.el7                                                             base                                       295 k
 container-selinux                                                         noarch                                    2:2.107-3.el7                                                         extras                                      39 k
 container-storage-setup                                                   noarch                                    0.11.0-2.git5eaf76c.el7                                               extras                                      35 k
 containers-common                                                         x86_64                                    1:0.1.37-3.el7.centos                                                 extras                                      21 k
 device-mapper-event                                                       x86_64                                    7:1.02.158-2.el7_7.2                                                  updates                                    190 k
 device-mapper-event-libs                                                  x86_64                                    7:1.02.158-2.el7_7.2                                                  updates                                    189 k
 device-mapper-persistent-data                                             x86_64                                    0.8.5-1.el7                                                           base                                       423 k
 docker-client                                                             x86_64                                    2:1.13.1-103.git7f2769b.el7.centos                                    extras                                     3.9 M
 docker-common                                                             x86_64                                    2:1.13.1-103.git7f2769b.el7.centos                                    extras                                      97 k
 libaio                                                                    x86_64                                    0.3.109-13.el7                                                        base                                        24 k
 libcgroup                                                                 x86_64                                    0.41-21.el7                                                           base                                        66 k
 libsemanage-python                                                        x86_64                                    2.5-14.el7                                                            base                                       113 k
 libyaml                                                                   x86_64                                    0.1.4-11.el7_0                                                        base                                        55 k
 lvm2                                                                      x86_64                                    7:2.02.185-2.el7_7.2                                                  updates                                    1.3 M
 lvm2-libs                                                                 x86_64                                    7:2.02.185-2.el7_7.2                                                  updates                                    1.1 M
 oci-register-machine                                                      x86_64                                    1:0-6.git2b44233.el7                                                  extras                                     1.1 M
 oci-systemd-hook                                                          x86_64                                    1:0.2.0-1.git05e6923.el7_6                                            extras                                      34 k
 oci-umount                                                                x86_64                                    2:2.5-3.el7                                                           extras                                      33 k
 policycoreutils-python                                                    x86_64                                    2.5-33.el7                                                            base                                       457 k
 python-IPy                                                                noarch                                    0.75-6.el7                                                            base                                        32 k
 python-backports                                                          x86_64                                    1.0-8.el7                                                             base                                       5.8 k
 python-backports-ssl_match_hostname                                       noarch                                    3.5.0.1-1.el7                                                         base                                        13 k
 python-ipaddress                                                          noarch                                    1.0.16-2.el7                                                          base                                        34 k
 python-pytoml                                                             noarch                                    0.1.14-1.git7dea353.el7                                               extras                                      18 k
 python-setuptools                                                         noarch                                    0.9.8-7.el7                                                           base                                       397 k
 setools-libs                                                              x86_64                                    3.3.8-4.el7                                                           base                                       620 k
 subscription-manager-rhsm-certificates                                    x86_64                                    1.24.13-3.el7.centos                                                  updates                                    228 k
 yajl                                                                      x86_64                                    2.0.4-4.el7                                                           base                                        39 k
Updating for dependencies:
 audit                                                                     x86_64                                    2.8.5-4.el7                                                           base                                       256 k
 audit-libs                                                                x86_64                                    2.8.5-4.el7                                                           base                                       102 k
 device-mapper                                                             x86_64                                    7:1.02.158-2.el7_7.2                                                  updates                                    294 k
 device-mapper-libs                                                        x86_64                                    7:1.02.158-2.el7_7.2                                                  updates                                    322 k
 policycoreutils                                                           x86_64                                    2.5-33.el7                                                            base                                       916 k

Transaction Summary
============================================================================================================================================================================================================================================
Install  1 Package  (+31 Dependent packages)
Upgrade             (  5 Dependent packages)

Total download size: 30 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/37): audit-2.8.5-4.el7.x86_64.rpm                                                                                                                                                                                 | 256 kB  00:00:00     
(2/37): audit-libs-2.8.5-4.el7.x86_64.rpm                                                                                                                                                                            | 102 kB  00:00:00     
(3/37): audit-libs-python-2.8.5-4.el7.x86_64.rpm                                                                                                                                                                     |  76 kB  00:00:00     
(4/37): PyYAML-3.10-11.el7.x86_64.rpm                                                                                                                                                                                | 153 kB  00:00:00     
(5/37): atomic-registries-1.22.1-29.gitb507039.el7.x86_64.rpm                                                                                                                                                        |  35 kB  00:00:00     
(6/37): checkpolicy-2.5-8.el7.x86_64.rpm                                                                                                                                                                             | 295 kB  00:00:00     
(7/37): container-storage-setup-0.11.0-2.git5eaf76c.el7.noarch.rpm                                                                                                                                                   |  35 kB  00:00:00     
(8/37): containers-common-0.1.37-3.el7.centos.x86_64.rpm                                                                                                                                                             |  21 kB  00:00:00     
(9/37): container-selinux-2.107-3.el7.noarch.rpm                                                                                                                                                                     |  39 kB  00:00:00     
(10/37): device-mapper-1.02.158-2.el7_7.2.x86_64.rpm                                                                                                                                                                 | 294 kB  00:00:00     
(11/37): device-mapper-event-1.02.158-2.el7_7.2.x86_64.rpm                                                                                                                                                           | 190 kB  00:00:00     
(12/37): device-mapper-event-libs-1.02.158-2.el7_7.2.x86_64.rpm                                                                                                                                                      | 189 kB  00:00:00     
(13/37): device-mapper-libs-1.02.158-2.el7_7.2.x86_64.rpm                                                                                                                                                            | 322 kB  00:00:00     
(14/37): device-mapper-persistent-data-0.8.5-1.el7.x86_64.rpm                                                                                                                                                        | 423 kB  00:00:00     
(15/37): docker-client-1.13.1-103.git7f2769b.el7.centos.x86_64.rpm                                                                                                                                                   | 3.9 MB  00:00:00     
(16/37): docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64.rpm                                                                                                                                                   |  97 kB  00:00:00     
(17/37): libaio-0.3.109-13.el7.x86_64.rpm                                                                                                                                                                            |  24 kB  00:00:00     
(18/37): libsemanage-python-2.5-14.el7.x86_64.rpm                                                                                                                                                                    | 113 kB  00:00:00     
(19/37): libcgroup-0.41-21.el7.x86_64.rpm                                                                                                                                                                            |  66 kB  00:00:00     
(20/37): libyaml-0.1.4-11.el7_0.x86_64.rpm                                                                                                                                                                           |  55 kB  00:00:00     
(21/37): docker-1.13.1-103.git7f2769b.el7.centos.x86_64.rpm                                                                                                                                                          |  18 MB  00:00:00     
(22/37): oci-register-machine-0-6.git2b44233.el7.x86_64.rpm                                                                                                                                                          | 1.1 MB  00:00:00     
(23/37): oci-systemd-hook-0.2.0-1.git05e6923.el7_6.x86_64.rpm                                                                                                                                                        |  34 kB  00:00:00     
(24/37): oci-umount-2.5-3.el7.x86_64.rpm                                                                                                                                                                             |  33 kB  00:00:00     
(25/37): lvm2-libs-2.02.185-2.el7_7.2.x86_64.rpm                                                                                                                                                                     | 1.1 MB  00:00:00     
(26/37): policycoreutils-python-2.5-33.el7.x86_64.rpm                                                                                                                                                                | 457 kB  00:00:00     
(27/37): lvm2-2.02.185-2.el7_7.2.x86_64.rpm                                                                                                                                                                          | 1.3 MB  00:00:00     
(28/37): policycoreutils-2.5-33.el7.x86_64.rpm                                                                                                                                                                       | 916 kB  00:00:00     
(29/37): python-IPy-0.75-6.el7.noarch.rpm                                                                                                                                                                            |  32 kB  00:00:00     
(30/37): python-backports-1.0-8.el7.x86_64.rpm                                                                                                                                                                       | 5.8 kB  00:00:00     
(31/37): python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch.rpm                                                                                                                                                |  13 kB  00:00:00     
(32/37): python-ipaddress-1.0.16-2.el7.noarch.rpm                                                                                                                                                                    |  34 kB  00:00:00     
(33/37): python-setuptools-0.9.8-7.el7.noarch.rpm                                                                                                                                                                    | 397 kB  00:00:00     
(34/37): setools-libs-3.3.8-4.el7.x86_64.rpm                                                                                                                                                                         | 620 kB  00:00:00     
(35/37): python-pytoml-0.1.14-1.git7dea353.el7.noarch.rpm                                                                                                                                                            |  18 kB  00:00:00     
(36/37): yajl-2.0.4-4.el7.x86_64.rpm                                                                                                                                                                                 |  39 kB  00:00:00     
(37/37): subscription-manager-rhsm-certificates-1.24.13-3.el7.centos.x86_64.rpm                                                                                                                                      | 228 kB  00:00:00     
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                                        14 MB/s |  30 MB  00:00:02     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : audit-libs-2.8.5-4.el7.x86_64                                                                                                                                                                                           1/42 
  Installing : libaio-0.3.109-13.el7.x86_64                                                                                                                                                                                            2/42 
  Updating   : policycoreutils-2.5-33.el7.x86_64                                                                                                                                                                                       3/42 
  Updating   : 7:device-mapper-libs-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                          4/42 
  Updating   : 7:device-mapper-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                               5/42 
  Installing : 7:device-mapper-event-libs-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                    6/42 
  Installing : yajl-2.0.4-4.el7.x86_64                                                                                                                                                                                                 7/42 
  Installing : 2:oci-umount-2.5-3.el7.x86_64                                                                                                                                                                                           8/42 
  Installing : 1:oci-systemd-hook-0.2.0-1.git05e6923.el7_6.x86_64                                                                                                                                                                      9/42 
  Installing : 7:device-mapper-event-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                        10/42 
  Installing : 7:lvm2-libs-2.02.185-2.el7_7.2.x86_64                                                                                                                                                                                  11/42 
  Installing : device-mapper-persistent-data-0.8.5-1.el7.x86_64                                                                                                                                                                       12/42 
  Installing : 7:lvm2-2.02.185-2.el7_7.2.x86_64                                                                                                                                                                                       13/42 
  Installing : container-storage-setup-0.11.0-2.git5eaf76c.el7.noarch                                                                                                                                                                 14/42 
  Installing : audit-libs-python-2.8.5-4.el7.x86_64                                                                                                                                                                                   15/42 
  Installing : libcgroup-0.41-21.el7.x86_64                                                                                                                                                                                           16/42 
  Installing : subscription-manager-rhsm-certificates-1.24.13-3.el7.centos.x86_64                                                                                                                                                     17/42 
  Installing : python-ipaddress-1.0.16-2.el7.noarch                                                                                                                                                                                   18/42 
  Installing : libyaml-0.1.4-11.el7_0.x86_64                                                                                                                                                                                          19/42 
  Installing : PyYAML-3.10-11.el7.x86_64                                                                                                                                                                                              20/42 
  Installing : python-backports-1.0-8.el7.x86_64                                                                                                                                                                                      21/42 
  Installing : python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch                                                                                                                                                               22/42 
  Installing : python-setuptools-0.9.8-7.el7.noarch                                                                                                                                                                                   23/42 
  Installing : 1:oci-register-machine-0-6.git2b44233.el7.x86_64                                                                                                                                                                       24/42 
  Installing : checkpolicy-2.5-8.el7.x86_64                                                                                                                                                                                           25/42 
  Installing : libsemanage-python-2.5-14.el7.x86_64                                                                                                                                                                                   26/42 
  Installing : setools-libs-3.3.8-4.el7.x86_64                                                                                                                                                                                        27/42 
  Installing : python-pytoml-0.1.14-1.git7dea353.el7.noarch                                                                                                                                                                           28/42 
  Installing : 1:atomic-registries-1.22.1-29.gitb507039.el7.x86_64                                                                                                                                                                    29/42 
  Installing : 1:containers-common-0.1.37-3.el7.centos.x86_64                                                                                                                                                                         30/42 
  Installing : python-IPy-0.75-6.el7.noarch                                                                                                                                                                                           31/42 
  Installing : policycoreutils-python-2.5-33.el7.x86_64                                                                                                                                                                               32/42 
  Installing : 2:container-selinux-2.107-3.el7.noarch                                                                                                                                                                                 33/42 
setsebool:  SELinux is disabled.
  Installing : 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64                                                                                                                                                                34/42 
  Installing : 2:docker-client-1.13.1-103.git7f2769b.el7.centos.x86_64                                                                                                                                                                35/42 
  Installing : 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64                                                                                                                                                                       36/42 
  Updating   : audit-2.8.5-4.el7.x86_64                                                                                                                                                                                               37/42 
  Cleanup    : 7:device-mapper-libs-1.02.149-10.el7_6.8.x86_64                                                                                                                                                                        38/42 
  Cleanup    : 7:device-mapper-1.02.149-10.el7_6.8.x86_64                                                                                                                                                                             39/42 
  Cleanup    : policycoreutils-2.5-29.el7_6.1.x86_64                                                                                                                                                                                  40/42 
  Cleanup    : audit-2.8.4-4.el7.x86_64                                                                                                                                                                                               41/42 
  Cleanup    : audit-libs-2.8.4-4.el7.x86_64                                                                                                                                                                                          42/42 
  Verifying  : 2:docker-common-1.13.1-103.git7f2769b.el7.centos.x86_64                                                                                                                                                                 1/42 
  Verifying  : 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64                                                                                                                                                                        2/42 
  Verifying  : python-backports-ssl_match_hostname-3.5.0.1-1.el7.noarch                                                                                                                                                                3/42 
  Verifying  : device-mapper-persistent-data-0.8.5-1.el7.x86_64                                                                                                                                                                        4/42 
  Verifying  : 2:container-selinux-2.107-3.el7.noarch                                                                                                                                                                                  5/42 
  Verifying  : container-storage-setup-0.11.0-2.git5eaf76c.el7.noarch                                                                                                                                                                  6/42 
  Verifying  : 1:atomic-registries-1.22.1-29.gitb507039.el7.x86_64                                                                                                                                                                     7/42 
  Verifying  : python-setuptools-0.9.8-7.el7.noarch                                                                                                                                                                                    8/42 
  Verifying  : 7:device-mapper-event-libs-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                    9/42 
  Verifying  : audit-libs-python-2.8.5-4.el7.x86_64                                                                                                                                                                                   10/42 
  Verifying  : 7:device-mapper-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                              11/42 
  Verifying  : audit-libs-2.8.5-4.el7.x86_64                                                                                                                                                                                          12/42 
  Verifying  : python-IPy-0.75-6.el7.noarch                                                                                                                                                                                           13/42 
  Verifying  : 7:lvm2-libs-2.02.185-2.el7_7.2.x86_64                                                                                                                                                                                  14/42 
  Verifying  : 1:containers-common-0.1.37-3.el7.centos.x86_64                                                                                                                                                                         15/42 
  Verifying  : 2:oci-umount-2.5-3.el7.x86_64                                                                                                                                                                                          16/42 
  Verifying  : 7:device-mapper-event-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                        17/42 
  Verifying  : python-pytoml-0.1.14-1.git7dea353.el7.noarch                                                                                                                                                                           18/42 
  Verifying  : libaio-0.3.109-13.el7.x86_64                                                                                                                                                                                           19/42 
  Verifying  : setools-libs-3.3.8-4.el7.x86_64                                                                                                                                                                                        20/42 
  Verifying  : 7:device-mapper-libs-1.02.158-2.el7_7.2.x86_64                                                                                                                                                                         21/42 
  Verifying  : policycoreutils-python-2.5-33.el7.x86_64                                                                                                                                                                               22/42 
  Verifying  : audit-2.8.5-4.el7.x86_64                                                                                                                                                                                               23/42 
  Verifying  : libsemanage-python-2.5-14.el7.x86_64                                                                                                                                                                                   24/42 
  Verifying  : 1:oci-systemd-hook-0.2.0-1.git05e6923.el7_6.x86_64                                                                                                                                                                     25/42 
  Verifying  : 2:docker-client-1.13.1-103.git7f2769b.el7.centos.x86_64                                                                                                                                                                26/42 
  Verifying  : checkpolicy-2.5-8.el7.x86_64                                                                                                                                                                                           27/42 
  Verifying  : 1:oci-register-machine-0-6.git2b44233.el7.x86_64                                                                                                                                                                       28/42 
  Verifying  : python-backports-1.0-8.el7.x86_64                                                                                                                                                                                      29/42 
  Verifying  : yajl-2.0.4-4.el7.x86_64                                                                                                                                                                                                30/42 
  Verifying  : policycoreutils-2.5-33.el7.x86_64                                                                                                                                                                                      31/42 
  Verifying  : libyaml-0.1.4-11.el7_0.x86_64                                                                                                                                                                                          32/42 
  Verifying  : 7:lvm2-2.02.185-2.el7_7.2.x86_64                                                                                                                                                                                       33/42 
  Verifying  : python-ipaddress-1.0.16-2.el7.noarch                                                                                                                                                                                   34/42 
  Verifying  : PyYAML-3.10-11.el7.x86_64                                                                                                                                                                                              35/42 
  Verifying  : subscription-manager-rhsm-certificates-1.24.13-3.el7.centos.x86_64                                                                                                                                                     36/42 
  Verifying  : libcgroup-0.41-21.el7.x86_64                                                                                                                                                                                           37/42 
  Verifying  : 7:device-mapper-libs-1.02.149-10.el7_6.8.x86_64                                                                                                                                                                        38/42 
  Verifying  : policycoreutils-2.5-29.el7_6.1.x86_64                                                                                                                                                                                  39/42 
  Verifying  : audit-2.8.4-4.el7.x86_64                                                                                                                                                                                               40/42 
  Verifying  : audit-libs-2.8.4-4.el7.x86_64                                                                                                                                                                                          41/42 
  Verifying  : 7:device-mapper-1.02.149-10.el7_6.8.x86_64                                                                                                                                                                             42/42 

Installed:
  docker.x86_64 2:1.13.1-103.git7f2769b.el7.centos                                                                                                                                                                                          

Dependency Installed:
  PyYAML.x86_64 0:3.10-11.el7                                                 atomic-registries.x86_64 1:1.22.1-29.gitb507039.el7                      audit-libs-python.x86_64 0:2.8.5-4.el7                                               
  checkpolicy.x86_64 0:2.5-8.el7                                              container-selinux.noarch 2:2.107-3.el7                                   container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.el7                             
  containers-common.x86_64 1:0.1.37-3.el7.centos                              device-mapper-event.x86_64 7:1.02.158-2.el7_7.2                          device-mapper-event-libs.x86_64 7:1.02.158-2.el7_7.2                                 
  device-mapper-persistent-data.x86_64 0:0.8.5-1.el7                          docker-client.x86_64 2:1.13.1-103.git7f2769b.el7.centos                  docker-common.x86_64 2:1.13.1-103.git7f2769b.el7.centos                              
  libaio.x86_64 0:0.3.109-13.el7                                              libcgroup.x86_64 0:0.41-21.el7                                           libsemanage-python.x86_64 0:2.5-14.el7                                               
  libyaml.x86_64 0:0.1.4-11.el7_0                                             lvm2.x86_64 7:2.02.185-2.el7_7.2                                         lvm2-libs.x86_64 7:2.02.185-2.el7_7.2                                                
  oci-register-machine.x86_64 1:0-6.git2b44233.el7                            oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.el7_6                       oci-umount.x86_64 2:2.5-3.el7                                                        
  policycoreutils-python.x86_64 0:2.5-33.el7                                  python-IPy.noarch 0:0.75-6.el7                                           python-backports.x86_64 0:1.0-8.el7                                                  
  python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7                  python-ipaddress.noarch 0:1.0.16-2.el7                                   python-pytoml.noarch 0:0.1.14-1.git7dea353.el7                                       
  python-setuptools.noarch 0:0.9.8-7.el7                                      setools-libs.x86_64 0:3.3.8-4.el7                                        subscription-manager-rhsm-certificates.x86_64 0:1.24.13-3.el7.centos                 
  yajl.x86_64 0:2.0.4-4.el7                                                  

Dependency Updated:
  audit.x86_64 0:2.8.5-4.el7           audit-libs.x86_64 0:2.8.5-4.el7           device-mapper.x86_64 7:1.02.158-2.el7_7.2           device-mapper-libs.x86_64 7:1.02.158-2.el7_7.2           policycoreutils.x86_64 0:2.5-33.el7          

Complete!
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker run -dit --restart=always --name=cboard -p 8026:8080 --privileged=true peterzhang921/cboard:0.4.1 /opt/apache-tomcat/bin/catalina.sh run
/usr/bin/docker-current: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See '/usr/bin/docker-current run --help'.
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# cat > /etc/docker/daemon.json <<EOF
> {"registry-mirrors": ["https://ts0bavkb.mirror.aliyuncs.com"]}
> EOF
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker run -dit --restart=always --name=cboard -p 8026:8080 --privileged=true peterzhang921/cboard:0.4.1 /opt/apache-tomcat/bin/catalina.sh run
/usr/bin/docker-current: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See '/usr/bin/docker-current run --help'.
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# systemctl start docker
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker run -dit --restart=always --name=cboard -p 8026:8080 --privileged=true peterzhang921/cboard:0.4.1 /opt/apache-tomcat/bin/catalina.sh run
Unable to find image 'peterzhang921/cboard:0.4.1' locally
Trying to pull repository docker.io/peterzhang921/cboard ... 
0.4.1: Pulling from docker.io/peterzhang921/cboard
993c50d47469: Pull complete 
af4e8a8bb24f: Pull complete 
0a9b05b457d3: Pull complete 
6c3f3e86a749: Pull complete 
287c5d44fad6: Pull complete 
48595c46d891: Pull complete 
5755c544c060: Pull complete 
9c9ead5cdaf0: Pull complete 
9841b0fc949a: Pull complete 
Digest: sha256:90a7b8f933af438b88066e050de04fe0923ede3a8cf0c54e2080ca2e4dc31339
Status: Downloaded newer image for docker.io/peterzhang921/cboard:0.4.1
e0994ccb5f2e43186811c86c6bd179396ed9bb9a32f7104a11dffeaf4c9c2e2d
[root@iZ8vb2gdx8nsmj17zwp1yrZ ~]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
e0994ccb5f2e        peterzhang921/cboard:0.4.1   "/opt/apache-tomca..."   10 seconds ago      Up 9 seconds        0.0.0.0:8026->8080/tcp   cboard

@shiloong
Copy link
Collaborator

Hi litongjava,

Sorry for late!
I've confirmed your issue with the docker image you mentioned. It's one known issue we marked here:
https://yq.aliyun.com/articles/712838?spm=a2c4e.11153959.0.0.1123efeewvL9Xj

Could you please try again with that guide?

Please feel free to contact us if any more question/issues.

Thanks!

casparant pushed a commit that referenced this issue Jan 16, 2020
commit 25adf50 upstream.

Will Deacon reported the following KASAN complaint:

[  149.890370] ==================================================================
[  149.891266] BUG: KASAN: double-free or invalid-free in io_sqe_files_unregister+0xa8/0x140
[  149.892218]
[  149.892411] CPU: 113 PID: 3974 Comm: io_uring_regist Tainted: G    B             5.1.0-rc3-00012-g40b114779944 #3
[  149.893623] Hardware name: linux,dummy-virt (DT)
[  149.894169] Call trace:
[  149.894539]  dump_backtrace+0x0/0x228
[  149.895172]  show_stack+0x14/0x20
[  149.895747]  dump_stack+0xe8/0x124
[  149.896335]  print_address_description+0x60/0x258
[  149.897148]  kasan_report_invalid_free+0x78/0xb8
[  149.897936]  __kasan_slab_free+0x1fc/0x228
[  149.898641]  kasan_slab_free+0x10/0x18
[  149.899283]  kfree+0x70/0x1f8
[  149.899798]  io_sqe_files_unregister+0xa8/0x140
[  149.900574]  io_ring_ctx_wait_and_kill+0x190/0x3c0
[  149.901402]  io_uring_release+0x2c/0x48
[  149.902068]  __fput+0x18c/0x510
[  149.902612]  ____fput+0xc/0x18
[  149.903146]  task_work_run+0xf0/0x148
[  149.903778]  do_notify_resume+0x554/0x748
[  149.904467]  work_pending+0x8/0x10
[  149.905060]
[  149.905331] Allocated by task 3974:
[  149.905934]  __kasan_kmalloc.isra.0.part.1+0x48/0xf8
[  149.906786]  __kasan_kmalloc.isra.0+0xb8/0xd8
[  149.907531]  kasan_kmalloc+0xc/0x18
[  149.908134]  __kmalloc+0x168/0x248
[  149.908724]  __arm64_sys_io_uring_register+0x2b8/0x15a8
[  149.909622]  el0_svc_common+0x100/0x258
[  149.910281]  el0_svc_handler+0x48/0xc0
[  149.910928]  el0_svc+0x8/0xc
[  149.911425]
[  149.911696] Freed by task 3974:
[  149.912242]  __kasan_slab_free+0x114/0x228
[  149.912955]  kasan_slab_free+0x10/0x18
[  149.913602]  kfree+0x70/0x1f8
[  149.914118]  __arm64_sys_io_uring_register+0xc2c/0x15a8
[  149.915009]  el0_svc_common+0x100/0x258
[  149.915670]  el0_svc_handler+0x48/0xc0
[  149.916317]  el0_svc+0x8/0xc
[  149.916817]
[  149.917101] The buggy address belongs to the object at ffff8004ce07ed00
[  149.917101]  which belongs to the cache kmalloc-128 of size 128
[  149.919197] The buggy address is located 0 bytes inside of
[  149.919197]  128-byte region [ffff8004ce07ed00, ffff8004ce07ed80)
[  149.921142] The buggy address belongs to the page:
[  149.921953] page:ffff7e0013381f00 count:1 mapcount:0 mapping:ffff800503417c00 index:0x0 compound_mapcount: 0
[  149.923595] flags: 0x1ffff00000010200(slab|head)
[  149.924388] raw: 1ffff00000010200 dead000000000100 dead000000000200 ffff800503417c00
[  149.925706] raw: 0000000000000000 0000000080400040 00000001ffffffff 0000000000000000
[  149.927011] page dumped because: kasan: bad access detected
[  149.927956]
[  149.928224] Memory state around the buggy address:
[  149.929054]  ffff8004ce07ec00: 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc
[  149.930274]  ffff8004ce07ec80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.931494] >ffff8004ce07ed00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  149.932712]                    ^
[  149.933281]  ffff8004ce07ed80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.934508]  ffff8004ce07ee00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.935725] ==================================================================

which is due to a failure in registrering a fileset. This frees the
ctx->user_files pointer, but doesn't clear it. When the io_uring
instance is later freed through the normal channels, we free this
pointer again. At this point it's invalid.

Ensure we clear the pointer when we free it for the error case.

Reported-by: Will Deacon <[email protected]>
Tested-by: Will Deacon <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Jeffle Xu <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
casparant pushed a commit that referenced this issue Jan 16, 2020
commit 975554b upstream.

In io_sq_offload_start(), we call cpu_possible() on an unbounded cpu
value from userspace. On v5.1-rc7 on arm64 with
CONFIG_DEBUG_PER_CPU_MAPS, this results in a splat:

  WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]

There was an attempt to fix this in commit:

  917257d ("io_uring: only test SQPOLL cpu after we've verified it")

... by adding a check after the cpu value had been limited to NR_CPU_IDS
using array_index_nospec(). However, this left an unbound check at the
start of the function, for which the warning still fires.

Let's fix this correctly by checking that the cpu value is bound by
nr_cpu_ids before passing it to cpu_possible(). Note that only
nr_cpu_ids of a cpumask are guaranteed to exist at runtime, and
nr_cpu_ids can be significantly smaller than NR_CPUs. For example, an
arm64 defconfig has NR_CPUS=256, while my test VM has 4 vCPUs.

Following the intent from the commit message for 917257d, the
check is moved under the SQ_AFF branch, which is the only branch where
the cpu values is consumed. The check is performed before bounding the
value with array_index_nospec() so that we don't silently accept bogus
cpu values from userspace, where array_index_nospec() would force these
values to 0.

I suspect we can remove the array_index_nospec() call entirely, but I've
conservatively left that in place, updated to use nr_cpu_ids to match
the prior check.

Tested on arm64 with the Syzkaller reproducer:

  https://syzkaller.appspot.com/bug?extid=cd714a07c6de2bc34293
  https://syzkaller.appspot.com/x/repro.syz?x=15d8b397200000

Full splat from before this patch:

WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpumask_check include/linux/cpumask.h:128 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpumask_test_cpu include/linux/cpumask.h:344 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_sq_offload_start fs/io_uring.c:2244 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_uring_create fs/io_uring.c:2864 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_uring_setup+0x1108/0x15a0 fs/io_uring.c:2916
Kernel panic - not syncing: panic_on_warn set ...
CPU: 1 PID: 27601 Comm: syz-executor.0 Not tainted 5.1.0-rc7 #3
Hardware name: linux,dummy-virt (DT)
Call trace:
 dump_backtrace+0x0/0x2f0 include/linux/compiler.h:193
 show_stack+0x20/0x30 arch/arm64/kernel/traps.c:158
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x110/0x190 lib/dump_stack.c:113
 panic+0x384/0x68c kernel/panic.c:214
 __warn+0x2bc/0x2c0 kernel/panic.c:571
 report_bug+0x228/0x2d8 lib/bug.c:186
 bug_handler+0xa0/0x1a0 arch/arm64/kernel/traps.c:956
 call_break_hook arch/arm64/kernel/debug-monitors.c:301 [inline]
 brk_handler+0x1d4/0x388 arch/arm64/kernel/debug-monitors.c:316
 do_debug_exception+0x1a0/0x468 arch/arm64/mm/fault.c:831
 el1_dbg+0x18/0x8c
 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]
 cpumask_check include/linux/cpumask.h:128 [inline]
 cpumask_test_cpu include/linux/cpumask.h:344 [inline]
 io_sq_offload_start fs/io_uring.c:2244 [inline]
 io_uring_create fs/io_uring.c:2864 [inline]
 io_uring_setup+0x1108/0x15a0 fs/io_uring.c:2916
 __do_sys_io_uring_setup fs/io_uring.c:2929 [inline]
 __se_sys_io_uring_setup fs/io_uring.c:2926 [inline]
 __arm64_sys_io_uring_setup+0x50/0x70 fs/io_uring.c:2926
 __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
 invoke_syscall arch/arm64/kernel/syscall.c:47 [inline]
 el0_svc_common.constprop.0+0x148/0x2e0 arch/arm64/kernel/syscall.c:83
 el0_svc_handler+0xdc/0x100 arch/arm64/kernel/syscall.c:129
 el0_svc+0x8/0xc arch/arm64/kernel/entry.S:948
SMP: stopping secondary CPUs
Dumping ftrace buffer:
   (ftrace buffer empty)
Kernel Offset: disabled
CPU features: 0x002,23000438
Memory Limit: none
Rebooting in 1 seconds..

Fixes: 917257d ("io_uring: only test SQPOLL cpu after we've verified it")
Signed-off-by: Mark Rutland <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Alexander Viro <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]

Simplied the logic

Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Jeffle Xu <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
casparant pushed a commit that referenced this issue Jan 16, 2020
commit 25adf50 upstream.

Will Deacon reported the following KASAN complaint:

[  149.890370] ==================================================================
[  149.891266] BUG: KASAN: double-free or invalid-free in io_sqe_files_unregister+0xa8/0x140
[  149.892218]
[  149.892411] CPU: 113 PID: 3974 Comm: io_uring_regist Tainted: G    B             5.1.0-rc3-00012-g40b114779944 #3
[  149.893623] Hardware name: linux,dummy-virt (DT)
[  149.894169] Call trace:
[  149.894539]  dump_backtrace+0x0/0x228
[  149.895172]  show_stack+0x14/0x20
[  149.895747]  dump_stack+0xe8/0x124
[  149.896335]  print_address_description+0x60/0x258
[  149.897148]  kasan_report_invalid_free+0x78/0xb8
[  149.897936]  __kasan_slab_free+0x1fc/0x228
[  149.898641]  kasan_slab_free+0x10/0x18
[  149.899283]  kfree+0x70/0x1f8
[  149.899798]  io_sqe_files_unregister+0xa8/0x140
[  149.900574]  io_ring_ctx_wait_and_kill+0x190/0x3c0
[  149.901402]  io_uring_release+0x2c/0x48
[  149.902068]  __fput+0x18c/0x510
[  149.902612]  ____fput+0xc/0x18
[  149.903146]  task_work_run+0xf0/0x148
[  149.903778]  do_notify_resume+0x554/0x748
[  149.904467]  work_pending+0x8/0x10
[  149.905060]
[  149.905331] Allocated by task 3974:
[  149.905934]  __kasan_kmalloc.isra.0.part.1+0x48/0xf8
[  149.906786]  __kasan_kmalloc.isra.0+0xb8/0xd8
[  149.907531]  kasan_kmalloc+0xc/0x18
[  149.908134]  __kmalloc+0x168/0x248
[  149.908724]  __arm64_sys_io_uring_register+0x2b8/0x15a8
[  149.909622]  el0_svc_common+0x100/0x258
[  149.910281]  el0_svc_handler+0x48/0xc0
[  149.910928]  el0_svc+0x8/0xc
[  149.911425]
[  149.911696] Freed by task 3974:
[  149.912242]  __kasan_slab_free+0x114/0x228
[  149.912955]  kasan_slab_free+0x10/0x18
[  149.913602]  kfree+0x70/0x1f8
[  149.914118]  __arm64_sys_io_uring_register+0xc2c/0x15a8
[  149.915009]  el0_svc_common+0x100/0x258
[  149.915670]  el0_svc_handler+0x48/0xc0
[  149.916317]  el0_svc+0x8/0xc
[  149.916817]
[  149.917101] The buggy address belongs to the object at ffff8004ce07ed00
[  149.917101]  which belongs to the cache kmalloc-128 of size 128
[  149.919197] The buggy address is located 0 bytes inside of
[  149.919197]  128-byte region [ffff8004ce07ed00, ffff8004ce07ed80)
[  149.921142] The buggy address belongs to the page:
[  149.921953] page:ffff7e0013381f00 count:1 mapcount:0 mapping:ffff800503417c00 index:0x0 compound_mapcount: 0
[  149.923595] flags: 0x1ffff00000010200(slab|head)
[  149.924388] raw: 1ffff00000010200 dead000000000100 dead000000000200 ffff800503417c00
[  149.925706] raw: 0000000000000000 0000000080400040 00000001ffffffff 0000000000000000
[  149.927011] page dumped because: kasan: bad access detected
[  149.927956]
[  149.928224] Memory state around the buggy address:
[  149.929054]  ffff8004ce07ec00: 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc
[  149.930274]  ffff8004ce07ec80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.931494] >ffff8004ce07ed00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  149.932712]                    ^
[  149.933281]  ffff8004ce07ed80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.934508]  ffff8004ce07ee00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.935725] ==================================================================

which is due to a failure in registrering a fileset. This frees the
ctx->user_files pointer, but doesn't clear it. When the io_uring
instance is later freed through the normal channels, we free this
pointer again. At this point it's invalid.

Ensure we clear the pointer when we free it for the error case.

Reported-by: Will Deacon <[email protected]>
Tested-by: Will Deacon <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Jeffle Xu <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
casparant pushed a commit that referenced this issue Jan 16, 2020
commit 975554b upstream.

In io_sq_offload_start(), we call cpu_possible() on an unbounded cpu
value from userspace. On v5.1-rc7 on arm64 with
CONFIG_DEBUG_PER_CPU_MAPS, this results in a splat:

  WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]

There was an attempt to fix this in commit:

  917257d ("io_uring: only test SQPOLL cpu after we've verified it")

... by adding a check after the cpu value had been limited to NR_CPU_IDS
using array_index_nospec(). However, this left an unbound check at the
start of the function, for which the warning still fires.

Let's fix this correctly by checking that the cpu value is bound by
nr_cpu_ids before passing it to cpu_possible(). Note that only
nr_cpu_ids of a cpumask are guaranteed to exist at runtime, and
nr_cpu_ids can be significantly smaller than NR_CPUs. For example, an
arm64 defconfig has NR_CPUS=256, while my test VM has 4 vCPUs.

Following the intent from the commit message for 917257d, the
check is moved under the SQ_AFF branch, which is the only branch where
the cpu values is consumed. The check is performed before bounding the
value with array_index_nospec() so that we don't silently accept bogus
cpu values from userspace, where array_index_nospec() would force these
values to 0.

I suspect we can remove the array_index_nospec() call entirely, but I've
conservatively left that in place, updated to use nr_cpu_ids to match
the prior check.

Tested on arm64 with the Syzkaller reproducer:

  https://syzkaller.appspot.com/bug?extid=cd714a07c6de2bc34293
  https://syzkaller.appspot.com/x/repro.syz?x=15d8b397200000

Full splat from before this patch:

WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpumask_check include/linux/cpumask.h:128 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpumask_test_cpu include/linux/cpumask.h:344 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_sq_offload_start fs/io_uring.c:2244 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_uring_create fs/io_uring.c:2864 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_uring_setup+0x1108/0x15a0 fs/io_uring.c:2916
Kernel panic - not syncing: panic_on_warn set ...
CPU: 1 PID: 27601 Comm: syz-executor.0 Not tainted 5.1.0-rc7 #3
Hardware name: linux,dummy-virt (DT)
Call trace:
 dump_backtrace+0x0/0x2f0 include/linux/compiler.h:193
 show_stack+0x20/0x30 arch/arm64/kernel/traps.c:158
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x110/0x190 lib/dump_stack.c:113
 panic+0x384/0x68c kernel/panic.c:214
 __warn+0x2bc/0x2c0 kernel/panic.c:571
 report_bug+0x228/0x2d8 lib/bug.c:186
 bug_handler+0xa0/0x1a0 arch/arm64/kernel/traps.c:956
 call_break_hook arch/arm64/kernel/debug-monitors.c:301 [inline]
 brk_handler+0x1d4/0x388 arch/arm64/kernel/debug-monitors.c:316
 do_debug_exception+0x1a0/0x468 arch/arm64/mm/fault.c:831
 el1_dbg+0x18/0x8c
 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]
 cpumask_check include/linux/cpumask.h:128 [inline]
 cpumask_test_cpu include/linux/cpumask.h:344 [inline]
 io_sq_offload_start fs/io_uring.c:2244 [inline]
 io_uring_create fs/io_uring.c:2864 [inline]
 io_uring_setup+0x1108/0x15a0 fs/io_uring.c:2916
 __do_sys_io_uring_setup fs/io_uring.c:2929 [inline]
 __se_sys_io_uring_setup fs/io_uring.c:2926 [inline]
 __arm64_sys_io_uring_setup+0x50/0x70 fs/io_uring.c:2926
 __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
 invoke_syscall arch/arm64/kernel/syscall.c:47 [inline]
 el0_svc_common.constprop.0+0x148/0x2e0 arch/arm64/kernel/syscall.c:83
 el0_svc_handler+0xdc/0x100 arch/arm64/kernel/syscall.c:129
 el0_svc+0x8/0xc arch/arm64/kernel/entry.S:948
SMP: stopping secondary CPUs
Dumping ftrace buffer:
   (ftrace buffer empty)
Kernel Offset: disabled
CPU features: 0x002,23000438
Memory Limit: none
Rebooting in 1 seconds..

Fixes: 917257d ("io_uring: only test SQPOLL cpu after we've verified it")
Signed-off-by: Mark Rutland <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Alexander Viro <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]

Simplied the logic

Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Jeffle Xu <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
casparant pushed a commit that referenced this issue Jan 17, 2020
commit 25adf50 upstream.

Will Deacon reported the following KASAN complaint:

[  149.890370] ==================================================================
[  149.891266] BUG: KASAN: double-free or invalid-free in io_sqe_files_unregister+0xa8/0x140
[  149.892218]
[  149.892411] CPU: 113 PID: 3974 Comm: io_uring_regist Tainted: G    B             5.1.0-rc3-00012-g40b114779944 #3
[  149.893623] Hardware name: linux,dummy-virt (DT)
[  149.894169] Call trace:
[  149.894539]  dump_backtrace+0x0/0x228
[  149.895172]  show_stack+0x14/0x20
[  149.895747]  dump_stack+0xe8/0x124
[  149.896335]  print_address_description+0x60/0x258
[  149.897148]  kasan_report_invalid_free+0x78/0xb8
[  149.897936]  __kasan_slab_free+0x1fc/0x228
[  149.898641]  kasan_slab_free+0x10/0x18
[  149.899283]  kfree+0x70/0x1f8
[  149.899798]  io_sqe_files_unregister+0xa8/0x140
[  149.900574]  io_ring_ctx_wait_and_kill+0x190/0x3c0
[  149.901402]  io_uring_release+0x2c/0x48
[  149.902068]  __fput+0x18c/0x510
[  149.902612]  ____fput+0xc/0x18
[  149.903146]  task_work_run+0xf0/0x148
[  149.903778]  do_notify_resume+0x554/0x748
[  149.904467]  work_pending+0x8/0x10
[  149.905060]
[  149.905331] Allocated by task 3974:
[  149.905934]  __kasan_kmalloc.isra.0.part.1+0x48/0xf8
[  149.906786]  __kasan_kmalloc.isra.0+0xb8/0xd8
[  149.907531]  kasan_kmalloc+0xc/0x18
[  149.908134]  __kmalloc+0x168/0x248
[  149.908724]  __arm64_sys_io_uring_register+0x2b8/0x15a8
[  149.909622]  el0_svc_common+0x100/0x258
[  149.910281]  el0_svc_handler+0x48/0xc0
[  149.910928]  el0_svc+0x8/0xc
[  149.911425]
[  149.911696] Freed by task 3974:
[  149.912242]  __kasan_slab_free+0x114/0x228
[  149.912955]  kasan_slab_free+0x10/0x18
[  149.913602]  kfree+0x70/0x1f8
[  149.914118]  __arm64_sys_io_uring_register+0xc2c/0x15a8
[  149.915009]  el0_svc_common+0x100/0x258
[  149.915670]  el0_svc_handler+0x48/0xc0
[  149.916317]  el0_svc+0x8/0xc
[  149.916817]
[  149.917101] The buggy address belongs to the object at ffff8004ce07ed00
[  149.917101]  which belongs to the cache kmalloc-128 of size 128
[  149.919197] The buggy address is located 0 bytes inside of
[  149.919197]  128-byte region [ffff8004ce07ed00, ffff8004ce07ed80)
[  149.921142] The buggy address belongs to the page:
[  149.921953] page:ffff7e0013381f00 count:1 mapcount:0 mapping:ffff800503417c00 index:0x0 compound_mapcount: 0
[  149.923595] flags: 0x1ffff00000010200(slab|head)
[  149.924388] raw: 1ffff00000010200 dead000000000100 dead000000000200 ffff800503417c00
[  149.925706] raw: 0000000000000000 0000000080400040 00000001ffffffff 0000000000000000
[  149.927011] page dumped because: kasan: bad access detected
[  149.927956]
[  149.928224] Memory state around the buggy address:
[  149.929054]  ffff8004ce07ec00: 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc
[  149.930274]  ffff8004ce07ec80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.931494] >ffff8004ce07ed00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  149.932712]                    ^
[  149.933281]  ffff8004ce07ed80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.934508]  ffff8004ce07ee00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
[  149.935725] ==================================================================

which is due to a failure in registrering a fileset. This frees the
ctx->user_files pointer, but doesn't clear it. When the io_uring
instance is later freed through the normal channels, we free this
pointer again. At this point it's invalid.

Ensure we clear the pointer when we free it for the error case.

Reported-by: Will Deacon <[email protected]>
Tested-by: Will Deacon <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Jeffle Xu <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
casparant pushed a commit that referenced this issue Jan 17, 2020
commit 975554b upstream.

In io_sq_offload_start(), we call cpu_possible() on an unbounded cpu
value from userspace. On v5.1-rc7 on arm64 with
CONFIG_DEBUG_PER_CPU_MAPS, this results in a splat:

  WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]

There was an attempt to fix this in commit:

  917257d ("io_uring: only test SQPOLL cpu after we've verified it")

... by adding a check after the cpu value had been limited to NR_CPU_IDS
using array_index_nospec(). However, this left an unbound check at the
start of the function, for which the warning still fires.

Let's fix this correctly by checking that the cpu value is bound by
nr_cpu_ids before passing it to cpu_possible(). Note that only
nr_cpu_ids of a cpumask are guaranteed to exist at runtime, and
nr_cpu_ids can be significantly smaller than NR_CPUs. For example, an
arm64 defconfig has NR_CPUS=256, while my test VM has 4 vCPUs.

Following the intent from the commit message for 917257d, the
check is moved under the SQ_AFF branch, which is the only branch where
the cpu values is consumed. The check is performed before bounding the
value with array_index_nospec() so that we don't silently accept bogus
cpu values from userspace, where array_index_nospec() would force these
values to 0.

I suspect we can remove the array_index_nospec() call entirely, but I've
conservatively left that in place, updated to use nr_cpu_ids to match
the prior check.

Tested on arm64 with the Syzkaller reproducer:

  https://syzkaller.appspot.com/bug?extid=cd714a07c6de2bc34293
  https://syzkaller.appspot.com/x/repro.syz?x=15d8b397200000

Full splat from before this patch:

WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpumask_check include/linux/cpumask.h:128 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 cpumask_test_cpu include/linux/cpumask.h:344 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_sq_offload_start fs/io_uring.c:2244 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_uring_create fs/io_uring.c:2864 [inline]
WARNING: CPU: 1 PID: 27601 at include/linux/cpumask.h:121 io_uring_setup+0x1108/0x15a0 fs/io_uring.c:2916
Kernel panic - not syncing: panic_on_warn set ...
CPU: 1 PID: 27601 Comm: syz-executor.0 Not tainted 5.1.0-rc7 #3
Hardware name: linux,dummy-virt (DT)
Call trace:
 dump_backtrace+0x0/0x2f0 include/linux/compiler.h:193
 show_stack+0x20/0x30 arch/arm64/kernel/traps.c:158
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x110/0x190 lib/dump_stack.c:113
 panic+0x384/0x68c kernel/panic.c:214
 __warn+0x2bc/0x2c0 kernel/panic.c:571
 report_bug+0x228/0x2d8 lib/bug.c:186
 bug_handler+0xa0/0x1a0 arch/arm64/kernel/traps.c:956
 call_break_hook arch/arm64/kernel/debug-monitors.c:301 [inline]
 brk_handler+0x1d4/0x388 arch/arm64/kernel/debug-monitors.c:316
 do_debug_exception+0x1a0/0x468 arch/arm64/mm/fault.c:831
 el1_dbg+0x18/0x8c
 cpu_max_bits_warn include/linux/cpumask.h:121 [inline]
 cpumask_check include/linux/cpumask.h:128 [inline]
 cpumask_test_cpu include/linux/cpumask.h:344 [inline]
 io_sq_offload_start fs/io_uring.c:2244 [inline]
 io_uring_create fs/io_uring.c:2864 [inline]
 io_uring_setup+0x1108/0x15a0 fs/io_uring.c:2916
 __do_sys_io_uring_setup fs/io_uring.c:2929 [inline]
 __se_sys_io_uring_setup fs/io_uring.c:2926 [inline]
 __arm64_sys_io_uring_setup+0x50/0x70 fs/io_uring.c:2926
 __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
 invoke_syscall arch/arm64/kernel/syscall.c:47 [inline]
 el0_svc_common.constprop.0+0x148/0x2e0 arch/arm64/kernel/syscall.c:83
 el0_svc_handler+0xdc/0x100 arch/arm64/kernel/syscall.c:129
 el0_svc+0x8/0xc arch/arm64/kernel/entry.S:948
SMP: stopping secondary CPUs
Dumping ftrace buffer:
   (ftrace buffer empty)
Kernel Offset: disabled
CPU features: 0x002,23000438
Memory Limit: none
Rebooting in 1 seconds..

Fixes: 917257d ("io_uring: only test SQPOLL cpu after we've verified it")
Signed-off-by: Mark Rutland <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Alexander Viro <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]

Simplied the logic

Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Jeffle Xu <[email protected]>
Acked-by: Caspar Zhang <[email protected]>
casparant pushed a commit that referenced this issue Feb 11, 2020
commit a4c0b3d upstream.

INFO: task syz-executor.5:8634 blocked for more than 143 seconds.
       Not tainted 5.2.0-rc5+ #3
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
syz-executor.5  D25632  8634   8224 0x00004004
Call Trace:
  context_switch kernel/sched/core.c:2818 [inline]
  __schedule+0x658/0x9e0 kernel/sched/core.c:3445
  schedule+0x131/0x1d0 kernel/sched/core.c:3509
  schedule_timeout+0x9a/0x2b0 kernel/time/timer.c:1783
  do_wait_for_common+0x35e/0x5a0 kernel/sched/completion.c:83
  __wait_for_common kernel/sched/completion.c:104 [inline]
  wait_for_common kernel/sched/completion.c:115 [inline]
  wait_for_completion+0x47/0x60 kernel/sched/completion.c:136
  kthread_stop+0xb4/0x150 kernel/kthread.c:559
  io_sq_thread_stop fs/io_uring.c:2252 [inline]
  io_finish_async fs/io_uring.c:2259 [inline]
  io_ring_ctx_free fs/io_uring.c:2770 [inline]
  io_ring_ctx_wait_and_kill+0x268/0x880 fs/io_uring.c:2834
  io_uring_release+0x5d/0x70 fs/io_uring.c:2842
  __fput+0x2e4/0x740 fs/file_table.c:280
  ____fput+0x15/0x20 fs/file_table.c:313
  task_work_run+0x17e/0x1b0 kernel/task_work.c:113
  tracehook_notify_resume include/linux/tracehook.h:185 [inline]
  exit_to_usermode_loop arch/x86/entry/common.c:168 [inline]
  prepare_exit_to_usermode+0x402/0x4f0 arch/x86/entry/common.c:199
  syscall_return_slowpath+0x110/0x440 arch/x86/entry/common.c:279
  do_syscall_64+0x126/0x140 arch/x86/entry/common.c:304
  entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x412fb1
Code: 80 3b 7c 0f 84 c7 02 00 00 c7 85 d0 00 00 00 00 00 00 00 48 8b 05 cf
a6 24 00 49 8b 14 24 41 b9 cb 2a 44 00 48 89 ee 48 89 df <48> 85 c0 4c 0f
45 c8 45 31 c0 31 c9 e8 0e 5b 00 00 85 c0 41 89 c7
RSP: 002b:00007ffe7ee6a180 EFLAGS: 00000293 ORIG_RAX: 0000000000000003
RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000412fb1
RDX: 0000001b2d920000 RSI: 0000000000000000 RDI: 0000000000000003
RBP: 0000000000000001 R08: 00000000f3a3e1f8 R09: 00000000f3a3e1fc
R10: 00007ffe7ee6a260 R11: 0000000000000293 R12: 000000000075c9a0
R13: 000000000075c9a0 R14: 0000000000024c00 R15: 000000000075bf2c

=============================================

There is an wrong logic, when kthread_park running
in front of io_sq_thread.

CPU#0					CPU#1

io_sq_thread_stop:			int kthread(void *_create):

kthread_park()
					__kthread_parkme(self);	 <<< Wrong
kthread_stop()
    << wait for self->exited
    << clear_bit KTHREAD_SHOULD_PARK

					ret = threadfn(data);
					   |
					   |- io_sq_thread
					       |- kthread_should_park()	<< false
					       |- schedule() <<< nobody wake up

stuck CPU#0				stuck CPU#1

So, use a new variable sqo_thread_started to ensure that io_sq_thread
run first, then io_sq_thread_stop.

Reported-by: [email protected]
Suggested-by: Jens Axboe <[email protected]>
Signed-off-by: Jackie Liu <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Xiaoguang Wang <[email protected]>
casparant pushed a commit that referenced this issue Feb 11, 2020
commit a4c0b3d upstream.

INFO: task syz-executor.5:8634 blocked for more than 143 seconds.
       Not tainted 5.2.0-rc5+ #3
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
syz-executor.5  D25632  8634   8224 0x00004004
Call Trace:
  context_switch kernel/sched/core.c:2818 [inline]
  __schedule+0x658/0x9e0 kernel/sched/core.c:3445
  schedule+0x131/0x1d0 kernel/sched/core.c:3509
  schedule_timeout+0x9a/0x2b0 kernel/time/timer.c:1783
  do_wait_for_common+0x35e/0x5a0 kernel/sched/completion.c:83
  __wait_for_common kernel/sched/completion.c:104 [inline]
  wait_for_common kernel/sched/completion.c:115 [inline]
  wait_for_completion+0x47/0x60 kernel/sched/completion.c:136
  kthread_stop+0xb4/0x150 kernel/kthread.c:559
  io_sq_thread_stop fs/io_uring.c:2252 [inline]
  io_finish_async fs/io_uring.c:2259 [inline]
  io_ring_ctx_free fs/io_uring.c:2770 [inline]
  io_ring_ctx_wait_and_kill+0x268/0x880 fs/io_uring.c:2834
  io_uring_release+0x5d/0x70 fs/io_uring.c:2842
  __fput+0x2e4/0x740 fs/file_table.c:280
  ____fput+0x15/0x20 fs/file_table.c:313
  task_work_run+0x17e/0x1b0 kernel/task_work.c:113
  tracehook_notify_resume include/linux/tracehook.h:185 [inline]
  exit_to_usermode_loop arch/x86/entry/common.c:168 [inline]
  prepare_exit_to_usermode+0x402/0x4f0 arch/x86/entry/common.c:199
  syscall_return_slowpath+0x110/0x440 arch/x86/entry/common.c:279
  do_syscall_64+0x126/0x140 arch/x86/entry/common.c:304
  entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x412fb1
Code: 80 3b 7c 0f 84 c7 02 00 00 c7 85 d0 00 00 00 00 00 00 00 48 8b 05 cf
a6 24 00 49 8b 14 24 41 b9 cb 2a 44 00 48 89 ee 48 89 df <48> 85 c0 4c 0f
45 c8 45 31 c0 31 c9 e8 0e 5b 00 00 85 c0 41 89 c7
RSP: 002b:00007ffe7ee6a180 EFLAGS: 00000293 ORIG_RAX: 0000000000000003
RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000412fb1
RDX: 0000001b2d920000 RSI: 0000000000000000 RDI: 0000000000000003
RBP: 0000000000000001 R08: 00000000f3a3e1f8 R09: 00000000f3a3e1fc
R10: 00007ffe7ee6a260 R11: 0000000000000293 R12: 000000000075c9a0
R13: 000000000075c9a0 R14: 0000000000024c00 R15: 000000000075bf2c

=============================================

There is an wrong logic, when kthread_park running
in front of io_sq_thread.

CPU#0					CPU#1

io_sq_thread_stop:			int kthread(void *_create):

kthread_park()
					__kthread_parkme(self);	 <<< Wrong
kthread_stop()
    << wait for self->exited
    << clear_bit KTHREAD_SHOULD_PARK

					ret = threadfn(data);
					   |
					   |- io_sq_thread
					       |- kthread_should_park()	<< false
					       |- schedule() <<< nobody wake up

stuck CPU#0				stuck CPU#1

So, use a new variable sqo_thread_started to ensure that io_sq_thread
run first, then io_sq_thread_stop.

Reported-by: [email protected]
Suggested-by: Jens Axboe <[email protected]>
Signed-off-by: Jackie Liu <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Xiaoguang Wang <[email protected]>
casparant pushed a commit that referenced this issue Mar 19, 2020
commit a4c0b3d upstream.

INFO: task syz-executor.5:8634 blocked for more than 143 seconds.
       Not tainted 5.2.0-rc5+ #3
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
syz-executor.5  D25632  8634   8224 0x00004004
Call Trace:
  context_switch kernel/sched/core.c:2818 [inline]
  __schedule+0x658/0x9e0 kernel/sched/core.c:3445
  schedule+0x131/0x1d0 kernel/sched/core.c:3509
  schedule_timeout+0x9a/0x2b0 kernel/time/timer.c:1783
  do_wait_for_common+0x35e/0x5a0 kernel/sched/completion.c:83
  __wait_for_common kernel/sched/completion.c:104 [inline]
  wait_for_common kernel/sched/completion.c:115 [inline]
  wait_for_completion+0x47/0x60 kernel/sched/completion.c:136
  kthread_stop+0xb4/0x150 kernel/kthread.c:559
  io_sq_thread_stop fs/io_uring.c:2252 [inline]
  io_finish_async fs/io_uring.c:2259 [inline]
  io_ring_ctx_free fs/io_uring.c:2770 [inline]
  io_ring_ctx_wait_and_kill+0x268/0x880 fs/io_uring.c:2834
  io_uring_release+0x5d/0x70 fs/io_uring.c:2842
  __fput+0x2e4/0x740 fs/file_table.c:280
  ____fput+0x15/0x20 fs/file_table.c:313
  task_work_run+0x17e/0x1b0 kernel/task_work.c:113
  tracehook_notify_resume include/linux/tracehook.h:185 [inline]
  exit_to_usermode_loop arch/x86/entry/common.c:168 [inline]
  prepare_exit_to_usermode+0x402/0x4f0 arch/x86/entry/common.c:199
  syscall_return_slowpath+0x110/0x440 arch/x86/entry/common.c:279
  do_syscall_64+0x126/0x140 arch/x86/entry/common.c:304
  entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x412fb1
Code: 80 3b 7c 0f 84 c7 02 00 00 c7 85 d0 00 00 00 00 00 00 00 48 8b 05 cf
a6 24 00 49 8b 14 24 41 b9 cb 2a 44 00 48 89 ee 48 89 df <48> 85 c0 4c 0f
45 c8 45 31 c0 31 c9 e8 0e 5b 00 00 85 c0 41 89 c7
RSP: 002b:00007ffe7ee6a180 EFLAGS: 00000293 ORIG_RAX: 0000000000000003
RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000412fb1
RDX: 0000001b2d920000 RSI: 0000000000000000 RDI: 0000000000000003
RBP: 0000000000000001 R08: 00000000f3a3e1f8 R09: 00000000f3a3e1fc
R10: 00007ffe7ee6a260 R11: 0000000000000293 R12: 000000000075c9a0
R13: 000000000075c9a0 R14: 0000000000024c00 R15: 000000000075bf2c

=============================================

There is an wrong logic, when kthread_park running
in front of io_sq_thread.

CPU#0					CPU#1

io_sq_thread_stop:			int kthread(void *_create):

kthread_park()
					__kthread_parkme(self);	 <<< Wrong
kthread_stop()
    << wait for self->exited
    << clear_bit KTHREAD_SHOULD_PARK

					ret = threadfn(data);
					   |
					   |- io_sq_thread
					       |- kthread_should_park()	<< false
					       |- schedule() <<< nobody wake up

stuck CPU#0				stuck CPU#1

So, use a new variable sqo_thread_started to ensure that io_sq_thread
run first, then io_sq_thread_stop.

Reported-by: [email protected]
Suggested-by: Jens Axboe <[email protected]>
Signed-off-by: Jackie Liu <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Xiaoguang Wang <[email protected]>
casparant pushed a commit that referenced this issue Sep 1, 2020
task #28557685

commit 28936b6 upstream.

inode->i_blocks could be accessed concurrently as noticed by KCSAN,

 BUG: KCSAN: data-race in ext4_do_update_inode [ext4] / inode_add_bytes

 write to 0xffff9a00d4b982d0 of 8 bytes by task 22100 on cpu 118:
  inode_add_bytes+0x65/0xf0
  __inode_add_bytes at fs/stat.c:689
  (inlined by) inode_add_bytes at fs/stat.c:702
  ext4_mb_new_blocks+0x418/0xca0 [ext4]
  ext4_ext_map_blocks+0x1a6b/0x27b0 [ext4]
  ext4_map_blocks+0x1a9/0x950 [ext4]
  _ext4_get_block+0xfc/0x270 [ext4]
  ext4_get_block_unwritten+0x33/0x50 [ext4]
  __block_write_begin_int+0x22e/0xae0
  __block_write_begin+0x39/0x50
  ext4_write_begin+0x388/0xb50 [ext4]
  ext4_da_write_begin+0x35f/0x8f0 [ext4]
  generic_perform_write+0x15d/0x290
  ext4_buffered_write_iter+0x11f/0x210 [ext4]
  ext4_file_write_iter+0xce/0x9e0 [ext4]
  new_sync_write+0x29c/0x3b0
  __vfs_write+0x92/0xa0
  vfs_write+0x103/0x260
  ksys_write+0x9d/0x130
  __x64_sys_write+0x4c/0x60
  do_syscall_64+0x91/0xb05
  entry_SYSCALL_64_after_hwframe+0x49/0xbe

 read to 0xffff9a00d4b982d0 of 8 bytes by task 8 on cpu 65:
  ext4_do_update_inode+0x4a0/0xf60 [ext4]
  ext4_inode_blocks_set at fs/ext4/inode.c:4815
  ext4_mark_iloc_dirty+0xaf/0x160 [ext4]
  ext4_mark_inode_dirty+0x129/0x3e0 [ext4]
  ext4_convert_unwritten_extents+0x253/0x2d0 [ext4]
  ext4_convert_unwritten_io_end_vec+0xc5/0x150 [ext4]
  ext4_end_io_rsv_work+0x22c/0x350 [ext4]
  process_one_work+0x54f/0xb90
  worker_thread+0x80/0x5f0
  kthread+0x1cd/0x1f0
  ret_from_fork+0x27/0x50

 4 locks held by kworker/u256:0/8:
  #0: ffff9a025abc4328 ((wq_completion)ext4-rsv-conversion){+.+.}, at: process_one_work+0x443/0xb90
  #1: ffffab5a862dbe20 ((work_completion)(&ei->i_rsv_conversion_work)){+.+.}, at: process_one_work+0x443/0xb90
  #2: ffff9a025a9d0f58 (jbd2_handle){++++}, at: start_this_handle+0x1c1/0x9d0 [jbd2]
  #3: ffff9a00d4b985d8 (&(&ei->i_raw_lock)->rlock){+.+.}, at: ext4_do_update_inode+0xaa/0xf60 [ext4]
 irq event stamp: 3009267
 hardirqs last  enabled at (3009267): [<ffffffff980da9b7>] __find_get_block+0x107/0x790
 hardirqs last disabled at (3009266): [<ffffffff980da8f9>] __find_get_block+0x49/0x790
 softirqs last  enabled at (3009230): [<ffffffff98a0034c>] __do_softirq+0x34c/0x57c
 softirqs last disabled at (3009223): [<ffffffff97cc67a2>] irq_exit+0xa2/0xc0

 Reported by Kernel Concurrency Sanitizer on:
 CPU: 65 PID: 8 Comm: kworker/u256:0 Tainted: G L 5.6.0-rc2-next-20200221+ #7
 Hardware name: HPE ProLiant DL385 Gen10/ProLiant DL385 Gen10, BIOS A40 07/10/2019
 Workqueue: ext4-rsv-conversion ext4_end_io_rsv_work [ext4]

The plain read is outside of inode->i_lock critical section which
results in a data race. Fix it by adding READ_ONCE() there.

Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Qian Cai <[email protected]>
Signed-off-by: Theodore Ts'o <[email protected]>
Cc: [email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Jeffle Xu <[email protected]>
Acked-by: Joseph Qi <[email protected]>
casparant pushed a commit that referenced this issue Sep 1, 2020
task #28557737

[ Upstream commit 6c5d911 ]

journal_head::b_transaction and journal_head::b_next_transaction could
be accessed concurrently as noticed by KCSAN,

 LTP: starting fsync04
 /dev/zero: Can't open blockdev
 EXT4-fs (loop0): mounting ext3 file system using the ext4 subsystem
 EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null)
 ==================================================================
 BUG: KCSAN: data-race in __jbd2_journal_refile_buffer [jbd2] / jbd2_write_access_granted [jbd2]

 write to 0xffff99f9b1bd0e30 of 8 bytes by task 25721 on cpu 70:
  __jbd2_journal_refile_buffer+0xdd/0x210 [jbd2]
  __jbd2_journal_refile_buffer at fs/jbd2/transaction.c:2569
  jbd2_journal_commit_transaction+0x2d15/0x3f20 [jbd2]
  (inlined by) jbd2_journal_commit_transaction at fs/jbd2/commit.c:1034
  kjournald2+0x13b/0x450 [jbd2]
  kthread+0x1cd/0x1f0
  ret_from_fork+0x27/0x50

 read to 0xffff99f9b1bd0e30 of 8 bytes by task 25724 on cpu 68:
  jbd2_write_access_granted+0x1b2/0x250 [jbd2]
  jbd2_write_access_granted at fs/jbd2/transaction.c:1155
  jbd2_journal_get_write_access+0x2c/0x60 [jbd2]
  __ext4_journal_get_write_access+0x50/0x90 [ext4]
  ext4_mb_mark_diskspace_used+0x158/0x620 [ext4]
  ext4_mb_new_blocks+0x54f/0xca0 [ext4]
  ext4_ind_map_blocks+0xc79/0x1b40 [ext4]
  ext4_map_blocks+0x3b4/0x950 [ext4]
  _ext4_get_block+0xfc/0x270 [ext4]
  ext4_get_block+0x3b/0x50 [ext4]
  __block_write_begin_int+0x22e/0xae0
  __block_write_begin+0x39/0x50
  ext4_write_begin+0x388/0xb50 [ext4]
  generic_perform_write+0x15d/0x290
  ext4_buffered_write_iter+0x11f/0x210 [ext4]
  ext4_file_write_iter+0xce/0x9e0 [ext4]
  new_sync_write+0x29c/0x3b0
  __vfs_write+0x92/0xa0
  vfs_write+0x103/0x260
  ksys_write+0x9d/0x130
  __x64_sys_write+0x4c/0x60
  do_syscall_64+0x91/0xb05
  entry_SYSCALL_64_after_hwframe+0x49/0xbe

 5 locks held by fsync04/25724:
  #0: ffff99f9911093f8 (sb_writers#13){.+.+}, at: vfs_write+0x21c/0x260
  #1: ffff99f9db4c0348 (&sb->s_type->i_mutex_key#15){+.+.}, at: ext4_buffered_write_iter+0x65/0x210 [ext4]
  #2: ffff99f5e7dfcf58 (jbd2_handle){++++}, at: start_this_handle+0x1c1/0x9d0 [jbd2]
  #3: ffff99f9db4c0168 (&ei->i_data_sem){++++}, at: ext4_map_blocks+0x176/0x950 [ext4]
  #4: ffffffff99086b40 (rcu_read_lock){....}, at: jbd2_write_access_granted+0x4e/0x250 [jbd2]
 irq event stamp: 1407125
 hardirqs last  enabled at (1407125): [<ffffffff980da9b7>] __find_get_block+0x107/0x790
 hardirqs last disabled at (1407124): [<ffffffff980da8f9>] __find_get_block+0x49/0x790
 softirqs last  enabled at (1405528): [<ffffffff98a0034c>] __do_softirq+0x34c/0x57c
 softirqs last disabled at (1405521): [<ffffffff97cc67a2>] irq_exit+0xa2/0xc0

 Reported by Kernel Concurrency Sanitizer on:
 CPU: 68 PID: 25724 Comm: fsync04 Tainted: G L 5.6.0-rc2-next-20200221+ #7
 Hardware name: HPE ProLiant DL385 Gen10/ProLiant DL385 Gen10, BIOS A40 07/10/2019

The plain reads are outside of jh->b_state_lock critical section which result
in data races. Fix them by adding pairs of READ|WRITE_ONCE().

Reviewed-by: Jan Kara <[email protected]>
Signed-off-by: Qian Cai <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Theodore Ts'o <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Jeffle Xu <[email protected]>
Acked-by: Joseph Qi <[email protected]>
casparant pushed a commit that referenced this issue Sep 1, 2020
task #28557760

commit 10a98cb upstream.

Leaving PF_MEMALLOC set when exiting a kthread causes it to remain set
during do_exit().  That can confuse things.  In particular, if BSD
process accounting is enabled, then do_exit() writes data to an
accounting file.  If that file has FS_SYNC_FL set, then this write
occurs synchronously and can misbehave if PF_MEMALLOC is set.

For example, if the accounting file is located on an XFS filesystem,
then a WARN_ON_ONCE() in iomap_do_writepage() is triggered and the data
doesn't get written when it should.  Or if the accounting file is
located on an ext4 filesystem without a journal, then a WARN_ON_ONCE()
in ext4_write_inode() is triggered and the inode doesn't get written.

Fix this in xfsaild() by using the helper functions to save and restore
PF_MEMALLOC.

This can be reproduced as follows in the kvm-xfstests test appliance
modified to add the 'acct' Debian package, and with kvm-xfstests's
recommended kconfig modified to add CONFIG_BSD_PROCESS_ACCT=y:

        mkfs.xfs -f /dev/vdb
        mount /vdb
        touch /vdb/file
        chattr +S /vdb/file
        accton /vdb/file
        mkfs.xfs -f /dev/vdc
        mount /vdc
        umount /vdc

It causes:
	WARNING: CPU: 1 PID: 336 at fs/iomap/buffered-io.c:1534
	CPU: 1 PID: 336 Comm: xfsaild/vdc Not tainted 5.6.0-rc5 #3
	Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20191223_100556-anatol 04/01/2014
	RIP: 0010:iomap_do_writepage+0x16b/0x1f0 fs/iomap/buffered-io.c:1534
	[...]
	Call Trace:
	 write_cache_pages+0x189/0x4d0 mm/page-writeback.c:2238
	 iomap_writepages+0x1c/0x33 fs/iomap/buffered-io.c:1642
	 xfs_vm_writepages+0x65/0x90 fs/xfs/xfs_aops.c:578
	 do_writepages+0x41/0xe0 mm/page-writeback.c:2344
	 __filemap_fdatawrite_range+0xd2/0x120 mm/filemap.c:421
	 file_write_and_wait_range+0x71/0xc0 mm/filemap.c:760
	 xfs_file_fsync+0x7a/0x2b0 fs/xfs/xfs_file.c:114
	 generic_write_sync include/linux/fs.h:2867 [inline]
	 xfs_file_buffered_aio_write+0x379/0x3b0 fs/xfs/xfs_file.c:691
	 call_write_iter include/linux/fs.h:1901 [inline]
	 new_sync_write+0x130/0x1d0 fs/read_write.c:483
	 __kernel_write+0x54/0xe0 fs/read_write.c:515
	 do_acct_process+0x122/0x170 kernel/acct.c:522
	 slow_acct_process kernel/acct.c:581 [inline]
	 acct_process+0x1d4/0x27c kernel/acct.c:607
	 do_exit+0x83d/0xbc0 kernel/exit.c:791
	 kthread+0xf1/0x140 kernel/kthread.c:257
	 ret_from_fork+0x27/0x50 arch/x86/entry/entry_64.S:352

This bug was originally reported by syzbot at
https://lore.kernel.org/r/[email protected].

Reported-by: [email protected]
Signed-off-by: Eric Biggers <[email protected]>
Reviewed-by: Darrick J. Wong <[email protected]>
Signed-off-by: Darrick J. Wong <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Jeffle Xu <[email protected]>
Acked-by: Joseph Qi <[email protected]>
casparant pushed a commit that referenced this issue Sep 1, 2020
task #25552995

commit e1d2238 upstream.

When enabling ARM64_PSEUDO_NMI feature in kdump capture kernel, it will
report a kernel stack overflow exception:

[    0.000000] CPU features: detected: IRQ priority masking
[    0.000000] alternatives: patching kernel code
[    0.000000] Insufficient stack space to handle exception!
[    0.000000] ESR: 0x96000044 -- DABT (current EL)
[    0.000000] FAR: 0x0000000000000040
[    0.000000] Task stack:     [0xffff0000097f0000..0xffff0000097f4000]
[    0.000000] IRQ stack:      [0x0000000000000000..0x0000000000004000]
[    0.000000] Overflow stack: [0xffff80002b7cf290..0xffff80002b7d0290]
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.34-lw+ #3
[    0.000000] pstate: 400003c5 (nZcv DAIF -PAN -UAO)
[    0.000000] pc : el1_sync+0x0/0xb8
[    0.000000] lr : el1_irq+0xb8/0x140
[    0.000000] sp : 0000000000000040
[    0.000000] pmr_save: 00000070
[    0.000000] x29: ffff0000097f3f60 x28: ffff000009806240
[    0.000000] x27: 0000000080000000 x26: 0000000000004000
[    0.000000] x25: 0000000000000000 x24: ffff000009329028
[    0.000000] x23: 0000000040000005 x22: ffff000008095c6c
[    0.000000] x21: ffff0000097f3f70 x20: 0000000000000070
[    0.000000] x19: ffff0000097f3e30 x18: ffffffffffffffff
[    0.000000] x17: 0000000000000000 x16: 0000000000000000
[    0.000000] x15: ffff0000097f9708 x14: ffff000089a382ef
[    0.000000] x13: ffff000009a382fd x12: ffff000009824000
[    0.000000] x11: ffff0000097fb7b0 x10: ffff000008730028
[    0.000000] x9 : ffff000009440018 x8 : 000000000000000d
[    0.000000] x7 : 6b20676e69686374 x6 : 000000000000003b
[    0.000000] x5 : 0000000000000000 x4 : ffff000008093600
[    0.000000] x3 : 0000000400000008 x2 : 7db2e689fc2b8e00
[    0.000000] x1 : 0000000000000000 x0 : ffff0000097f3e30
[    0.000000] Kernel panic - not syncing: kernel stack overflow
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.34-lw+ #3
[    0.000000] Call trace:
[    0.000000]  dump_backtrace+0x0/0x1b8
[    0.000000]  show_stack+0x24/0x30
[    0.000000]  dump_stack+0xa8/0xcc
[    0.000000]  panic+0x134/0x30c
[    0.000000]  __stack_chk_fail+0x0/0x28
[    0.000000]  handle_bad_stack+0xfc/0x108
[    0.000000]  __bad_stack+0x90/0x94
[    0.000000]  el1_sync+0x0/0xb8
[    0.000000]  init_gic_priority_masking+0x4c/0x70
[    0.000000]  smp_prepare_boot_cpu+0x60/0x68
[    0.000000]  start_kernel+0x1e8/0x53c
[    0.000000] ---[ end Kernel panic - not syncing: kernel stack overflow ]---

The reason is init_gic_priority_masking() may unmask PSR.I while the
irq stacks are not inited yet. Some "NMI" could be raised unfortunately
and it will just go into this exception.

In this patch, we just write the PMR in smp_prepare_boot_cpu(), and delay
unmasking PSR.I after irq stacks inited in init_IRQ().

Fixes: e793218 ("arm64: Switch to PMR masking when starting CPUs")
Cc: Will Deacon <[email protected]>
Reviewed-by: Marc Zyngier <[email protected]>
Signed-off-by: Wei Li <[email protected]>
[JT: make init_gic_priority_masking() not modify daif, rebase on other
     priority masking fixes]
Signed-off-by: Julien Thierry <[email protected]>
Signed-off-by: Catalin Marinas <[email protected]>
Signed-off-by: Zou Cao <[email protected]>
Reviewed-by: luanshi <[email protected]>
casparant pushed a commit that referenced this issue Sep 2, 2020
task #25552995

commit e1d2238 upstream.

When enabling ARM64_PSEUDO_NMI feature in kdump capture kernel, it will
report a kernel stack overflow exception:

[    0.000000] CPU features: detected: IRQ priority masking
[    0.000000] alternatives: patching kernel code
[    0.000000] Insufficient stack space to handle exception!
[    0.000000] ESR: 0x96000044 -- DABT (current EL)
[    0.000000] FAR: 0x0000000000000040
[    0.000000] Task stack:     [0xffff0000097f0000..0xffff0000097f4000]
[    0.000000] IRQ stack:      [0x0000000000000000..0x0000000000004000]
[    0.000000] Overflow stack: [0xffff80002b7cf290..0xffff80002b7d0290]
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.34-lw+ #3
[    0.000000] pstate: 400003c5 (nZcv DAIF -PAN -UAO)
[    0.000000] pc : el1_sync+0x0/0xb8
[    0.000000] lr : el1_irq+0xb8/0x140
[    0.000000] sp : 0000000000000040
[    0.000000] pmr_save: 00000070
[    0.000000] x29: ffff0000097f3f60 x28: ffff000009806240
[    0.000000] x27: 0000000080000000 x26: 0000000000004000
[    0.000000] x25: 0000000000000000 x24: ffff000009329028
[    0.000000] x23: 0000000040000005 x22: ffff000008095c6c
[    0.000000] x21: ffff0000097f3f70 x20: 0000000000000070
[    0.000000] x19: ffff0000097f3e30 x18: ffffffffffffffff
[    0.000000] x17: 0000000000000000 x16: 0000000000000000
[    0.000000] x15: ffff0000097f9708 x14: ffff000089a382ef
[    0.000000] x13: ffff000009a382fd x12: ffff000009824000
[    0.000000] x11: ffff0000097fb7b0 x10: ffff000008730028
[    0.000000] x9 : ffff000009440018 x8 : 000000000000000d
[    0.000000] x7 : 6b20676e69686374 x6 : 000000000000003b
[    0.000000] x5 : 0000000000000000 x4 : ffff000008093600
[    0.000000] x3 : 0000000400000008 x2 : 7db2e689fc2b8e00
[    0.000000] x1 : 0000000000000000 x0 : ffff0000097f3e30
[    0.000000] Kernel panic - not syncing: kernel stack overflow
[    0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.19.34-lw+ #3
[    0.000000] Call trace:
[    0.000000]  dump_backtrace+0x0/0x1b8
[    0.000000]  show_stack+0x24/0x30
[    0.000000]  dump_stack+0xa8/0xcc
[    0.000000]  panic+0x134/0x30c
[    0.000000]  __stack_chk_fail+0x0/0x28
[    0.000000]  handle_bad_stack+0xfc/0x108
[    0.000000]  __bad_stack+0x90/0x94
[    0.000000]  el1_sync+0x0/0xb8
[    0.000000]  init_gic_priority_masking+0x4c/0x70
[    0.000000]  smp_prepare_boot_cpu+0x60/0x68
[    0.000000]  start_kernel+0x1e8/0x53c
[    0.000000] ---[ end Kernel panic - not syncing: kernel stack overflow ]---

The reason is init_gic_priority_masking() may unmask PSR.I while the
irq stacks are not inited yet. Some "NMI" could be raised unfortunately
and it will just go into this exception.

In this patch, we just write the PMR in smp_prepare_boot_cpu(), and delay
unmasking PSR.I after irq stacks inited in init_IRQ().

Fixes: e793218 ("arm64: Switch to PMR masking when starting CPUs")
Cc: Will Deacon <[email protected]>
Reviewed-by: Marc Zyngier <[email protected]>
Signed-off-by: Wei Li <[email protected]>
[JT: make init_gic_priority_masking() not modify daif, rebase on other
     priority masking fixes]
Signed-off-by: Julien Thierry <[email protected]>
Signed-off-by: Catalin Marinas <[email protected]>
Signed-off-by: Zou Cao <[email protected]>
Reviewed-by: luanshi <[email protected]>
casparant pushed a commit that referenced this issue Jan 19, 2021
task #31256938

commit 5df7419 upstream

The reclaim code that balances between swapping and cache reclaim tries to
predict likely reuse based on in-memory reference patterns alone.  This
works in many cases, but when it fails it cannot detect when the cache is
thrashing pathologically, or when we're in the middle of a swap storm.

The high seek cost of rotational drives under which the algorithm evolved
also meant that mistakes could quickly result in lockups from too
aggressive swapping (which is predominantly random IO).  As a result, the
balancing code has been tuned over time to a point where it mostly goes
for page cache and defers swapping until the VM is under significant
memory pressure.

The resulting strategy doesn't make optimal caching decisions - where
optimal is the least amount of IO required to execute the workload.

The proliferation of fast random IO devices such as SSDs, in-memory
compression such as zswap, and persistent memory technologies on the
horizon, has made this undesirable behavior very noticable: Even in the
presence of large amounts of cold anonymous memory and a capable swap
device, the VM refuses to even seriously scan these pages, and can leave
the page cache thrashing needlessly.

This series sets out to address this.  Since commit ("a528910e12ec mm:
thrash detection-based file cache sizing") we have exact tracking of
refault IO - the ultimate cost of reclaiming the wrong pages.  This allows
us to use an IO cost based balancing model that is more aggressive about
scanning anonymous memory when the cache is thrashing, while being able to
avoid unnecessary swap storms.

These patches base the LRU balance on the rate of refaults on each list,
times the relative IO cost between swap device and filesystem
(swappiness), in order to optimize reclaim for least IO cost incurred.

	History

I floated these changes in 2016.  At the time they were incomplete and
full of workarounds due to a lack of infrastructure in the reclaim code:
We didn't have PageWorkingset, we didn't have hierarchical cgroup
statistics, and problems with the cgroup swap controller.  As swapping
wasn't too high a priority then, the patches stalled out.  With all
dependencies in place now, here we are again with much cleaner,
feature-complete patches.

I kept the acks for patches that stayed materially the same :-)

Below is a series of test results that demonstrate certain problematic
behavior of the current code, as well as showcase the new code's more
predictable and appropriate balancing decisions.

	Test #1: No convergence

This test shows an edge case where the VM currently doesn't converge at
all on a new file workingset with a stale anon/tmpfs set.

The test sets up a cold anon set the size of 3/4 RAM, then tries to
establish a new file set half the size of RAM (flat access pattern).

The vanilla kernel refuses to even scan anon pages and never converges.
The file set is perpetually served from the filesystem.

The first test kernel is with the series up to the workingset patch
applied.  This allows thrashing page cache to challenge the anonymous
workingset.  The VM then scans the lists based on the current
scanned/rotated balancing algorithm.  It converges on a stable state where
all cold anon pages are pushed out and the fileset is served entirely from
cache:

			    noconverge/5.7-rc5-mm	noconverge/5.7-rc5-mm-workingset
Scanned			417719308.00 (    +0.00%)		64091155.00 (   -84.66%)
Reclaimed		417711094.00 (    +0.00%)		61640308.00 (   -85.24%)
Reclaim efficiency %	      100.00 (    +0.00%)		      96.18 (    -3.78%)
Scanned file		417719308.00 (    +0.00%)		59211118.00 (   -85.83%)
Scanned anon			0.00 (    +0.00%)	         4880037.00 (          )
Swapouts			0.00 (    +0.00%)	         2439957.00 (          )
Swapins				0.00 (    +0.00%)		     257.00 (          )
Refaults		415246605.00 (    +0.00%)		59183722.00 (   -85.75%)
Restore refaults		0.00 (    +0.00%)	        54988252.00 (          )

The second test kernel is with the full patch series applied, which
replaces the scanned/rotated ratios with refault/swapin rate-based
balancing.  It evicts the cold anon pages more aggressively in the
presence of a thrashing cache and the absence of swapins, and so converges
with about 60% of the IO and reclaim activity:

			noconverge/5.7-rc5-mm-workingset	noconverge/5.7-rc5-mm-lrubalance
Scanned				64091155.00 (    +0.00%)		37579741.00 (   -41.37%)
Reclaimed			61640308.00 (    +0.00%)		35129293.00 (   -43.01%)
Reclaim efficiency %		      96.18 (    +0.00%)		      93.48 (    -2.78%)
Scanned file			59211118.00 (    +0.00%)		32708385.00 (   -44.76%)
Scanned anon			 4880037.00 (    +0.00%)		 4871356.00 (    -0.18%)
Swapouts			 2439957.00 (    +0.00%)		 2435565.00 (    -0.18%)
Swapins				     257.00 (    +0.00%)		     262.00 (    +1.94%)
Refaults			59183722.00 (    +0.00%)		32675667.00 (   -44.79%)
Restore refaults		54988252.00 (    +0.00%)		28480430.00 (   -48.21%)

We're triggering this case in host sideloading scenarios: When a host's
primary workload is not saturating the machine (primary load is usually
driven by user activity), we can optimistically sideload a batch job; if
user activity picks up and the primary workload needs the whole host
during this time, we freeze the sideload and rely on it getting pushed to
swap.  Frequently that swapping doesn't happen and the completely inactive
sideload simply stays resident while the expanding primary worklad is
struggling to gain ground.

	Test #2: Kernel build

This test is a a kernel build that is slightly memory-restricted (make -j4
inside a 400M cgroup).

Despite the very aggressive swapping of cold anon pages in test #1, this
test shows that the new kernel carefully balances swap against cache
refaults when both the file and the cache set are pressured.

It shows the patched kernel to be slightly better at finding the coldest
memory from the combined anon and file set to evict under pressure.  The
result is lower aggregate reclaim and paging activity:

z				    5.7-rc5-mm	5.7-rc5-mm-lrubalance
Real time		   210.60 (    +0.00%)	   210.97 (    +0.18%)
User time		   745.42 (    +0.00%)	   746.48 (    +0.14%)
System time		    69.78 (    +0.00%)	    69.79 (    +0.02%)
Scanned file		354682.00 (    +0.00%)	293661.00 (   -17.20%)
Scanned anon		465381.00 (    +0.00%)	378144.00 (   -18.75%)
Swapouts		185920.00 (    +0.00%)	147801.00 (   -20.50%)
Swapins			 34583.00 (    +0.00%)	 32491.00 (    -6.05%)
Refaults		212664.00 (    +0.00%)	172409.00 (   -18.93%)
Restore refaults	 48861.00 (    +0.00%)	 80091.00 (   +63.91%)
Total paging IO		433167.00 (    +0.00%)	352701.00 (   -18.58%)

	Test #3: Overload

This next test is not about performance, but rather about the
predictability of the algorithm.  The current balancing behavior doesn't
always lead to comprehensible results, which makes performance analysis
and parameter tuning (swappiness e.g.) very difficult.

The test shows the balancing behavior under equivalent anon and file
input.  Anon and file sets are created of equal size (3/4 RAM), have the
same access patterns (a hot-cold gradient), and synchronized access rates.
Swappiness is raised from the default of 60 to 100 to indicate equal IO
cost between swap and cache.

With the vanilla balancing code, anon scans make up around 9% of the total
pages scanned, or a ~1:10 ratio.  This is a surprisingly skewed ratio, and
it's an outcome that is hard to explain given the input parameters to the
VM.

The new balancing model targets a 1:2 balance: All else being equal,
reclaiming a file page costs one page IO - the refault; reclaiming an anon
page costs two IOs - the swapout and the swapin.  In the test we observe a
~1:3 balance.

The scanned and paging IO numbers indicate that the anon LRU algorithm we
have in place right now does a slightly worse job at picking the coldest
pages compared to the file algorithm.  There is ongoing work to improve
this, like Joonsoo's anon workingset patches; however, it's difficult to
compare the two aging strategies when the balancing between them is
behaving unintuitively.

The slightly less efficient anon reclaim results in a deviation from the
optimal 1:2 scan ratio we would like to see here - however, 1:3 is much
closer to what we'd want to see in this test than the vanilla kernel's
aging of 10+ cache pages for every anonymous one:

			overload-100/5.7-rc5-mm-workingset	overload-100/5.7-rc5-mm-lrubalance-realfile
Scanned				 533633725.00 (    +0.00%)			  595687785.00 (   +11.63%)
Reclaimed			 494325440.00 (    +0.00%)			  518154380.00 (    +4.82%)
Reclaim efficiency %			92.63 (    +0.00%)				 86.98 (    -6.03%)
Scanned file			 484532894.00 (    +0.00%)			  456937722.00 (    -5.70%)
Scanned anon			  49100831.00 (    +0.00%)			  138750063.00 (  +182.58%)
Swapouts			   8096423.00 (    +0.00%)			   48982142.00 (  +504.98%)
Swapins				  10027384.00 (    +0.00%)			   62325044.00 (  +521.55%)
Refaults			 479819973.00 (    +0.00%)			  451309483.00 (    -5.94%)
Restore refaults		 426422087.00 (    +0.00%)			  399914067.00 (    -6.22%)
Total paging IO			 497943780.00 (    +0.00%)			  562616669.00 (   +12.99%)

	Test #4: Parallel IO

It's important to note that these patches only affect the situation where
the kernel has to reclaim workingset memory, which is usually a
transitionary period.  The vast majority of page reclaim occuring in a
system is from trimming the ever-expanding page cache.

These patches don't affect cache trimming behavior.  We never swap as long
as we only have use-once cache moving through the file LRU, we only
consider swapping when the cache is actively thrashing.

The following test demonstrates this.  It has an anon workingset that
takes up half of RAM and then writes a file that is twice the size of RAM
out to disk.

As the cache is funneled through the inactive file list, no anon pages are
scanned (aside from apparently some background noise of 10 pages):

					  5.7-rc5-mm		          5.7-rc5-mm-lrubalance
Scanned			    10714722.00 (    +0.00%)		       10723445.00 (    +0.08%)
Reclaimed		    10703596.00 (    +0.00%)		       10712166.00 (    +0.08%)
Reclaim efficiency %		  99.90 (    +0.00%)			     99.89 (    -0.00%)
Scanned file		    10714722.00 (    +0.00%)		       10723435.00 (    +0.08%)
Scanned anon			   0.00 (    +0.00%)			     10.00 (          )
Swapouts			   0.00 (    +0.00%)			      7.00 (          )
Swapins				   0.00 (    +0.00%)			      0.00 (    +0.00%)
Refaults			  92.00 (    +0.00%)			     41.00 (   -54.84%)
Restore refaults		   0.00 (    +0.00%)			      0.00 (    +0.00%)
Total paging IO			  92.00 (    +0.00%)			     48.00 (   -47.31%)

This patch (of 14):

Currently, THP are counted as single pages until they are split right
before being swapped out.  However, at that point the VM is already in the
middle of reclaim, and adjusting the LRU balance then is useless.

Always account THP by the number of basepages, and remove the fixup from
the splitting path.

Signed-off-by: Johannes Weiner <[email protected]>
Signed-off-by: Shakeel Butt <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Reviewed-by: Rik van Riel <[email protected]>
Reviewed-by: Shakeel Butt <[email protected]>
Acked-by: Michal Hocko <[email protected]>
Acked-by: Minchan Kim <[email protected]>
Cc: Joonsoo Kim <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: zhongjiang-ali <[email protected]>
Reviewed-by: Xunlei Pang <[email protected]>
casparant pushed a commit that referenced this issue Jan 19, 2021
to #31497805

commit eb2667b linux-block/io_uring-5.10.

Abaci Fuzz reported a shift-out-of-bounds BUG in io_uring_create():

[ 59.598207] UBSAN: shift-out-of-bounds in ./include/linux/log2.h:57:13
[ 59.599665] shift exponent 64 is too large for 64-bit type 'long unsigned int'
[ 59.601230] CPU: 0 PID: 963 Comm: a.out Not tainted 5.10.0-rc4+ #3
[ 59.602502] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
[ 59.603673] Call Trace:
[ 59.604286] dump_stack+0x107/0x163
[ 59.605237] ubsan_epilogue+0xb/0x5a
[ 59.606094] __ubsan_handle_shift_out_of_bounds.cold+0xb2/0x20e
[ 59.607335] ? lock_downgrade+0x6c0/0x6c0
[ 59.608182] ? rcu_read_lock_sched_held+0xaf/0xe0
[ 59.609166] io_uring_create.cold+0x99/0x149
[ 59.610114] io_uring_setup+0xd6/0x140
[ 59.610975] ? io_uring_create+0x2510/0x2510
[ 59.611945] ? lockdep_hardirqs_on_prepare+0x286/0x400
[ 59.613007] ? syscall_enter_from_user_mode+0x27/0x80
[ 59.614038] ? trace_hardirqs_on+0x5b/0x180
[ 59.615056] do_syscall_64+0x2d/0x40
[ 59.615940] entry_SYSCALL_64_after_hwframe+0x44/0xa9
[ 59.617007] RIP: 0033:0x7f2bb8a0b239

This is caused by roundup_pow_of_two() if the input entries larger
enough, e.g. 2^32-1. For sq_entries, it will check first and we allow
at most IORING_MAX_ENTRIES, so it is okay. But for cq_entries, we do
round up first, that may overflow and truncate it to 0, which is not
the expected behavior. So check the cq size first and then do round up.

Fixes: 88ec321 ("io_uring: round-up cq size before comparing with rounded sq size")
Reported-by: Abaci Fuzz <[email protected]>
Signed-off-by: Joseph Qi <[email protected]>
Reviewed-by: Stefano Garzarella <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Acked-by: Xiaoguang Wang <[email protected]>
shiloong pushed a commit that referenced this issue Jun 10, 2021
fix #33110603

commit 334b0f4 upstream.

There is a race condition which results in a deadlock when rmdir and
mkdir execute concurrently:

$ ls /sys/fs/resctrl/c1/mon_groups/m1/
cpus  cpus_list  mon_data  tasks

Thread 1: rmdir /sys/fs/resctrl/c1
Thread 2: mkdir /sys/fs/resctrl/c1/mon_groups/m1

3 locks held by mkdir/48649:
 #0:  (sb_writers#17){.+.+}, at: [<ffffffffb4ca2aa0>] mnt_want_write+0x20/0x50
 #1:  (&type->i_mutex_dir_key#8/1){+.+.}, at: [<ffffffffb4c8c13b>] filename_create+0x7b/0x170
 #2:  (rdtgroup_mutex){+.+.}, at: [<ffffffffb4a4389d>] rdtgroup_kn_lock_live+0x3d/0x70

4 locks held by rmdir/48652:
 #0:  (sb_writers#17){.+.+}, at: [<ffffffffb4ca2aa0>] mnt_want_write+0x20/0x50
 #1:  (&type->i_mutex_dir_key#8/1){+.+.}, at: [<ffffffffb4c8c3cf>] do_rmdir+0x13f/0x1e0
 #2:  (&type->i_mutex_dir_key#8){++++}, at: [<ffffffffb4c86d5d>] vfs_rmdir+0x4d/0x120
 #3:  (rdtgroup_mutex){+.+.}, at: [<ffffffffb4a4389d>] rdtgroup_kn_lock_live+0x3d/0x70

Thread 1 is deleting control group "c1". Holding rdtgroup_mutex,
kernfs_remove() removes all kernfs nodes under directory "c1"
recursively, then waits for sub kernfs node "mon_groups" to drop active
reference.

Thread 2 is trying to create a subdirectory "m1" in the "mon_groups"
directory. The wrapper kernfs_iop_mkdir() takes an active reference to
the "mon_groups" directory but the code drops the active reference to
the parent directory "c1" instead.

As a result, Thread 1 is blocked on waiting for active reference to drop
and never release rdtgroup_mutex, while Thread 2 is also blocked on
trying to get rdtgroup_mutex.

Thread 1 (rdtgroup_rmdir)   Thread 2 (rdtgroup_mkdir)
(rmdir /sys/fs/resctrl/c1)  (mkdir /sys/fs/resctrl/c1/mon_groups/m1)
-------------------------   -------------------------
                            kernfs_iop_mkdir
                              /*
                               * kn: "m1", parent_kn: "mon_groups",
                               * prgrp_kn: parent_kn->parent: "c1",
                               *
                               * "mon_groups", parent_kn->active++: 1
                               */
                              kernfs_get_active(parent_kn)
kernfs_iop_rmdir
  /* "c1", kn->active++ */
  kernfs_get_active(kn)

  rdtgroup_kn_lock_live
    atomic_inc(&rdtgrp->waitcount)
    /* "c1", kn->active-- */
    kernfs_break_active_protection(kn)
    mutex_lock

  rdtgroup_rmdir_ctrl
    free_all_child_rdtgrp
      sentry->flags = RDT_DELETED

    rdtgroup_ctrl_remove
      rdtgrp->flags = RDT_DELETED
      kernfs_get(kn)
      kernfs_remove(rdtgrp->kn)
        __kernfs_remove
          /* "mon_groups", sub_kn */
          atomic_add(KN_DEACTIVATED_BIAS, &sub_kn->active)
          kernfs_drain(sub_kn)
            /*
             * sub_kn->active == KN_DEACTIVATED_BIAS + 1,
             * waiting on sub_kn->active to drop, but it
             * never drops in Thread 2 which is blocked
             * on getting rdtgroup_mutex.
             */
Thread 1 hangs here ---->
            wait_event(sub_kn->active == KN_DEACTIVATED_BIAS)
            ...
                              rdtgroup_mkdir
                                rdtgroup_mkdir_mon(parent_kn, prgrp_kn)
                                  mkdir_rdt_prepare(parent_kn, prgrp_kn)
                                    rdtgroup_kn_lock_live(prgrp_kn)
                                      atomic_inc(&rdtgrp->waitcount)
                                      /*
                                       * "c1", prgrp_kn->active--
                                       *
                                       * The active reference on "c1" is
                                       * dropped, but not matching the
                                       * actual active reference taken
                                       * on "mon_groups", thus causing
                                       * Thread 1 to wait forever while
                                       * holding rdtgroup_mutex.
                                       */
                                      kernfs_break_active_protection(
                                                               prgrp_kn)
                                      /*
                                       * Trying to get rdtgroup_mutex
                                       * which is held by Thread 1.
                                       */
Thread 2 hangs here ---->             mutex_lock
                                      ...

The problem is that the creation of a subdirectory in the "mon_groups"
directory incorrectly releases the active protection of its parent
directory instead of itself before it starts waiting for rdtgroup_mutex.
This is triggered by the rdtgroup_mkdir() flow calling
rdtgroup_kn_lock_live()/rdtgroup_kn_unlock() with kernfs node of the
parent control group ("c1") as argument. It should be called with kernfs
node "mon_groups" instead. What is currently missing is that the
kn->priv of "mon_groups" is NULL instead of pointing to the rdtgrp.

Fix it by pointing kn->priv to rdtgrp when "mon_groups" is created. Then
it could be passed to rdtgroup_kn_lock_live()/rdtgroup_kn_unlock()
instead. And then it operates on the same rdtgroup structure but handles
the active reference of kernfs node "mon_groups" to prevent deadlock.
The same changes are also made to the "mon_data" directories.

This results in some unused function parameters that will be cleaned up
in follow-up patch as the focus here is on the fix only in support of
backporting efforts.

Fixes: c7d9aac ("x86/intel_rdt/cqm: Add mkdir support for RDT monitoring")
Suggested-by: Reinette Chatre <[email protected]>
Signed-off-by: Xiaochen Shen <[email protected]>
Signed-off-by: Borislav Petkov <[email protected]>
Reviewed-by: Reinette Chatre <[email protected]>
Reviewed-by: Tony Luck <[email protected]>
Acked-by: Thomas Gleixner <[email protected]>
Cc: [email protected]
Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Zelin Deng <[email protected]>
Reviewed-by: Artie Ding <[email protected]>
shiloong pushed a commit that referenced this issue Apr 2, 2022
OpenAnolis Bug Tracker: 0000546

commit 1cfbb48 upstream

Confusingly, there are three SPSR layouts that a kernel may need to deal
with:

(1) An AArch64 SPSR_ELx view of an AArch64 pstate
(2) An AArch64 SPSR_ELx view of an AArch32 pstate
(3) An AArch32 SPSR_* view of an AArch32 pstate

When the KVM AArch32 support code deals with SPSR_{EL2,HYP}, it's either
dealing with #2 or #3 consistently. On arm64 the PSR_AA32_* definitions
match the AArch64 SPSR_ELx view, and on arm the PSR_AA32_* definitions
match the AArch32 SPSR_* view.

However, when we inject an exception into an AArch32 guest, we have to
synthesize the AArch32 SPSR_* that the guest will see. Thus, an AArch64
host needs to synthesize layout #3 from layout #2.

This patch adds a new host_spsr_to_spsr32() helper for this, and makes
use of it in the KVM AArch32 support code. For arm64 we need to shuffle
the DIT bit around, and remove the SS bit, while for arm we can use the
value as-is.

I've open-coded the bit manipulation for now to avoid having to rework
the existing PSR_* definitions into PSR64_AA32_* and PSR32_AA32_*
definitions. I hope to perform a more thorough refactoring in future so
that we can handle pstate view manipulation more consistently across the
kernel tree.

Signed-off-by: Mark Rutland <[email protected]>
Signed-off-by: Marc Zyngier <[email protected]>
Reviewed-by: Alexandru Elisei <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Kaige Fu <[email protected]>
Reviewed-by: luanshi <[email protected]>
Reviewed-by: Shannon Zhao <[email protected]>
Reviewed-by: Baolin Wang <[email protected]>
Signed-off-by: Xunlei Pang <[email protected]>
shiloong pushed a commit that referenced this issue Apr 2, 2022
OpenAnolis Bug Tracker: 0000552

commit 5cbf326 upstream.

Use follow_pfn() to get the PFN of a PFNMAP VMA instead of assuming that
vma->vm_pgoff holds the base PFN of the VMA.  This fixes a bug where
attempting to do VFIO_IOMMU_MAP_DMA on an arbitrary PFNMAP'd region of
memory calculates garbage for the PFN.

Hilariously, this only got detected because the first "PFN" calculated
by vaddr_get_pfn() is PFN 0 (vma->vm_pgoff==0), and iommu_iova_to_phys()
uses PA==0 as an error, which triggers a WARN in vfio_unmap_unpin()
because the translation "failed".  PFN 0 is now unconditionally reserved
on x86 in order to mitigate L1TF, which causes is_invalid_reserved_pfn()
to return true and in turns results in vaddr_get_pfn() returning success
for PFN 0.  Eventually the bogus calculation runs into PFNs that aren't
reserved and leads to failure in vfio_pin_map_dma().  The subsequent
call to vfio_remove_dma() attempts to unmap PFN 0 and WARNs.

  WARNING: CPU: 8 PID: 5130 at drivers/vfio/vfio_iommu_type1.c:750 vfio_unmap_unpin+0x2e1/0x310 [vfio_iommu_type1]
  Modules linked in: vfio_pci vfio_virqfd vfio_iommu_type1 vfio ...
  CPU: 8 PID: 5130 Comm: sgx Tainted: G        W         5.6.0-rc5-705d787c7fee-vfio+ #3
  Hardware name: Intel Corporation Mehlow UP Server Platform/Moss Beach Server, BIOS CNLSE2R1.D00.X119.B49.1803010910 03/01/2018
  RIP: 0010:vfio_unmap_unpin+0x2e1/0x310 [vfio_iommu_type1]
  Code: <0f> 0b 49 81 c5 00 10 00 00 e9 c5 fe ff ff bb 00 10 00 00 e9 3d fe
  RSP: 0018:ffffbeb5039ebda8 EFLAGS: 00010246
  RAX: 0000000000000000 RBX: ffff9a55cbf8d480 RCX: 0000000000000000
  RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff9a52b771c200
  RBP: 0000000000000000 R08: 0000000000000040 R09: 00000000fffffff2
  R10: 0000000000000001 R11: ffff9a51fa896000 R12: 0000000184010000
  R13: 0000000184000000 R14: 0000000000010000 R15: ffff9a55cb66ea08
  FS:  00007f15d3830b40(0000) GS:ffff9a55d5600000(0000) knlGS:0000000000000000
  CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  CR2: 0000561cf39429e0 CR3: 000000084f75f005 CR4: 00000000003626e0
  DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
  DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
  Call Trace:
   vfio_remove_dma+0x17/0x70 [vfio_iommu_type1]
   vfio_iommu_type1_ioctl+0x9e3/0xa7b [vfio_iommu_type1]
   ksys_ioctl+0x92/0xb0
   __x64_sys_ioctl+0x16/0x20
   do_syscall_64+0x4c/0x180
   entry_SYSCALL_64_after_hwframe+0x44/0xa9
  RIP: 0033:0x7f15d04c75d7
  Code: <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 81 48 2d 00 f7 d8 64 89 01 48

Fixes: 73fa0d1 ("vfio: Type1 IOMMU implementation")
Signed-off-by: Sean Christopherson <[email protected]>
Signed-off-by: Alex Williamson <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Kaige Fu <[email protected]>
Reviewed-by: Alex Shi <[email protected]>
Reviewed-by: Baolin Wang <[email protected]>
Signed-off-by: Xunlei Pang <[email protected]>
shiloong pushed a commit that referenced this issue Apr 2, 2022
ANBZ: #191

commit 4b0970024408afb17886e0c76e9761c4264db2a8 upstream.

Patch series "mm/memory_hotplug: "auto-movable" online policy and memory groups", v3.

I. Goal

The goal of this series is improving in-kernel auto-online support.  It
tackles the fundamental problems that:

 1) We can create zone imbalances when onlining all memory blindly to
    ZONE_MOVABLE, in the worst case crashing the system. We have to know
    upfront how much memory we are going to hotplug such that we can
    safely enable auto-onlining of all hotplugged memory to ZONE_MOVABLE
    via "online_movable". This is far from practical and only applicable in
    limited setups -- like inside VMs under the RHV/oVirt hypervisor which
    will never hotplug more than 3 times the boot memory (and the
    limitation is only in place due to the Linux limitation).

 2) We see more setups that implement dynamic VM resizing, hot(un)plugging
    memory to resize VM memory. In these setups, we might hotplug a lot of
    memory, but it might happen in various small steps in both directions
    (e.g., 2 GiB -> 8 GiB -> 4 GiB -> 16 GiB ...). virtio-mem is the
    primary driver of this upstream right now, performing such dynamic
    resizing NUMA-aware via multiple virtio-mem devices.

    Onlining all hotplugged memory to ZONE_NORMAL means we basically have
    no hotunplug guarantees. Onlining all to ZONE_MOVABLE means we can
    easily run into zone imbalances when growing a VM. We want a mixture,
    and we want as much memory as reasonable/configured in ZONE_MOVABLE.
    Details regarding zone imbalances can be found at [1].

 3) Memory devices consist of 1..X memory block devices, however, the
    kernel doesn't really track the relationship. Consequently, also user
    space has no idea. We want to make per-device decisions.

    As one example, for memory hotunplug it doesn't make sense to use a
    mixture of zones within a single DIMM: we want all MOVABLE if
    possible, otherwise all !MOVABLE, because any !MOVABLE part will easily
    block the whole DIMM from getting hotunplugged.

    As another example, virtio-mem operates on individual units that span
    1..X memory blocks. Similar to a DIMM, we want a unit to either be all
    MOVABLE or !MOVABLE. A "unit" can be thought of like a DIMM, however,
    all units of a virtio-mem device logically belong together and are
    managed (added/removed) by a single driver. We want as much memory of
    a virtio-mem device to be MOVABLE as possible.

 4) We want memory onlining to be done right from the kernel while adding
    memory, not triggered by user space via udev rules; for example, this
    is reqired for fast memory hotplug for drivers that add individual
    memory blocks, like virito-mem. We want a way to configure a policy in
    the kernel and avoid implementing advanced policies in user space.

The auto-onlining support we have in the kernel is not sufficient.  All we
have is a) online everything MOVABLE (online_movable) b) online everything
!MOVABLE (online_kernel) c) keep zones contiguous (online).  This series
allows configuring c) to mean instead "online movable if possible
according to the coniguration, driven by a maximum MOVABLE:KERNEL ratio"
-- a new onlining policy.

II. Approach

This series does 3 things:

 1) Introduces the "auto-movable" online policy that initially operates on
    individual memory blocks only. It uses a maximum MOVABLE:KERNEL ratio
    to make a decision whether a memory block will be onlined to
    ZONE_MOVABLE or not. However, in the basic form, hotplugged KERNEL
    memory does not allow for more MOVABLE memory (details in the
    patches). CMA memory is treated like MOVABLE memory.

 2) Introduces static (e.g., DIMM) and dynamic (e.g., virtio-mem) memory
    groups and uses group information to make decisions in the
    "auto-movable" online policy across memory blocks of a single memory
    device (modeled as memory group). More details can be found in patch
    #3 or in the DIMM example below.

 3) Maximizes ZONE_MOVABLE memory within dynamic memory groups, by
    allowing ZONE_NORMAL memory within a dynamic memory group to allow for
    more ZONE_MOVABLE memory within the same memory group. The target use
    case is dynamic VM resizing using virtio-mem. See the virtio-mem
    example below.

I remember that the basic idea of using a ratio to implement a policy in
the kernel was once mentioned by Vitaly Kuznetsov, but I might be wrong (I
lost the pointer to that discussion).

For me, the main use case is using it along with virtio-mem (and DIMMs /
ppc64 dlpar where necessary) for dynamic resizing of VMs, increasing the
amount of memory we can hotunplug reliably again if we might eventually
hotplug a lot of memory to a VM.

III. Target Usage

The target usage will be:

 1) Linux boots with "mhp_default_online_type=offline"

 2) User space (e.g., systemd unit) configures memory onlining (according
    to a config file and system properties), for example:
    * Setting memory_hotplug.online_policy=auto-movable
    * Setting memory_hotplug.auto_movable_ratio=301
    * Setting memory_hotplug.auto_movable_numa_aware=true

 3) User space enabled auto onlining via "echo online >
    /sys/devices/system/memory/auto_online_blocks"

 4) User space triggers manual onlining of all already-offline memory
    blocks (go over offline memory blocks and set them to "online")

IV. Example

For DIMMs, hotplugging 4 GiB DIMMs to a 4 GiB VM with a configured ratio of
301% results in the following layout:
	Memory block 0-15:    DMA32   (early)
	Memory block 32-47:   Normal  (early)
	Memory block 48-79:   Movable (DIMM 0)
	Memory block 80-111:  Movable (DIMM 1)
	Memory block 112-143: Movable (DIMM 2)
	Memory block 144-275: Normal  (DIMM 3)
	Memory block 176-207: Normal  (DIMM 4)
	... all Normal
	(-> hotplugged Normal memory does not allow for more Movable memory)

For virtio-mem, using a simple, single virtio-mem device with a 4 GiB VM
will result in the following layout:
	Memory block 0-15:    DMA32   (early)
	Memory block 32-47:   Normal  (early)
	Memory block 48-143:  Movable (virtio-mem, first 12 GiB)
	Memory block 144:     Normal  (virtio-mem, next 128 MiB)
	Memory block 145-147: Movable (virtio-mem, next 384 MiB)
	Memory block 148:     Normal  (virtio-mem, next 128 MiB)
	Memory block 149-151: Movable (virtio-mem, next 384 MiB)
	... Normal/Movable mixture as above
	(-> hotplugged Normal memory allows for more Movable memory within
	    the same device)

Which gives us maximum flexibility when dynamically growing/shrinking a
VM in smaller steps.

V. Doc Update

I'll update the memory-hotplug.rst documentation, once the overhaul [1] is
usptream. Until then, details can be found in patch #2.

VI. Future Work

 1) Use memory groups for ppc64 dlpar
 2) Being able to specify a portion of (early) kernel memory that will be
    excluded from the ratio. Like "128 MiB globally/per node" are excluded.

    This might be helpful when starting VMs with extremely small memory
    footprint (e.g., 128 MiB) and hotplugging memory later -- not wanting
    the first hotplugged units getting onlined to ZONE_MOVABLE. One
    alternative would be a trigger to not consider ZONE_DMA memory
    in the ratio. We'll have to see if this is really rrequired.
 3) Indicate to user space that MOVABLE might be a bad idea -- especially
    relevant when memory ballooning without support for balloon compaction
    is active.

This patch (of 9):

For implementing a new memory onlining policy, which determines when to
online memory blocks to ZONE_MOVABLE semi-automatically, we need the
number of present early (boot) pages -- present pages excluding hotplugged
pages.  Let's track these pages per zone.

Pass a page instead of the zone to adjust_present_page_count(), similar as
adjust_managed_page_count() and derive the zone from the page.

It's worth noting that a memory block to be offlined/onlined is either
completely "early" or "not early".  add_memory() and friends can only add
complete memory blocks and we only online/offline complete (individual)
memory blocks.

Link: https://lkml.kernel.org/r/[email protected]
Link: https://lkml.kernel.org/r/[email protected]

Backport notes:
- Fixes minor conflicts.

Signed-off-by: David Hildenbrand <[email protected]>
Cc: Vitaly Kuznetsov <[email protected]>
Cc: "Michael S. Tsirkin" <[email protected]>
Cc: Jason Wang <[email protected]>
Cc: Marek Kedzierski <[email protected]>
Cc: Hui Zhu <[email protected]>
Cc: Pankaj Gupta <[email protected]>
Cc: Wei Yang <[email protected]>
Cc: Oscar Salvador <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Dan Williams <[email protected]>
Cc: Anshuman Khandual <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Vlastimil Babka <[email protected]>
Cc: Mike Rapoport <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Len Brown <[email protected]>
Cc: Pavel Tatashin <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Rafael J. Wysocki <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Signed-off-by: Eric Ren <[email protected]>
Reviewed-by: Gang Deng <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
aliyun-linux-os Aliyun Linux OS issues
Projects
None yet
Development

No branches or pull requests

4 participants