[Devel] [PATCH rh7] cgroup: add missing dput() in cgroup_unmark_ve_roots()
cgroup_unmark_ve_roots() calls dget() on cgroup's dentry but don't have the corresponding dput() call. This leads to leaking cgroups. Add missing dput() to fix this. https://jira.sw.ru/browse/PSBM-107328 Fixes: 1ac69e183447 ("ve/cgroup: added release_agent to each container root cgroup.") Signed-off-by: Andrey Ryabinin --- kernel/cgroup.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 55713a0071ce..5f3111805eba 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -4719,6 +4719,7 @@ void cgroup_unmark_ve_roots(struct ve_struct *ve) mutex_lock(>i_mutex); mutex_lock(_mutex); cgroup_rm_file(cgrp, cft); + dput(cgrp->dentry); BUG_ON(!rcu_dereference_protected(cgrp->ve_owner, lockdep_is_held(_mutex))); rcu_assign_pointer(cgrp->ve_owner, NULL); -- 2.26.2 ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel
[Devel] [PATCH rh7] ms/ipv4: Namespaceify tcp_fastopen knob
From: Haishuang Yan Different namespace application might require enable TCP Fast Open feature independently of the host. This patch series continues making more of the TCP Fast Open related sysctl knobs be per net-namespace. Reported-by: Luca BRUNO Signed-off-by: Haishuang Yan Signed-off-by: David S. Miller (cherry picked from commit e1cfcbe82b4534bd0f99fef92a6d33843fd85e0e) https://jira.sw.ru/browse/PSBM-107100 Signed-off-by: Konstantin Khorenko Backport notice: - dropped hunk in TCP_FASTOPEN_CONNECT case in do_tcp_setsockopt() (no case TCP_FASTOPEN_CONNECT) - dropped hunk in tcp_fastopen_cookie_check(), no function, it appears later by 065263f40f09 ("net/tcp-fastopen: refactor cookie check logic") - added a hunk in tcp_send_syn_data() instead - after mainstream commit default tcp_fastopen value changed 0->1. We preserve native RHEL7 default - 0. Signed-off-by: Konstantin Khorenko --- include/net/netns/ipv4.h | 2 ++ include/net/tcp.h | 1 - net/ipv4/af_inet.c | 11 ++- net/ipv4/sysctl_net_ipv4.c | 14 +++--- net/ipv4/tcp.c | 2 +- net/ipv4/tcp_fastopen.c| 9 - net/ipv4/tcp_ipv4.c| 3 +++ net/ipv4/tcp_output.c | 2 +- 8 files changed, 24 insertions(+), 20 deletions(-) diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h index 1cb305e450f4..69ccdb6c6ca7 100644 --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h @@ -76,6 +76,8 @@ struct netns_ipv4 { kgid_t sysctl_ping_group_range[2]; long sysctl_tcp_mem[3]; + int sysctl_tcp_fastopen; + atomic_t dev_addr_genid; RH_KABI_FILL_HOLE(unsigned int fib_seq)/* protected by rtnl_mutex */ diff --git a/include/net/tcp.h b/include/net/tcp.h index 174b8cd80ca8..892432f49bb6 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -249,7 +249,6 @@ extern int sysctl_tcp_retries1; extern int sysctl_tcp_retries2; extern int sysctl_tcp_orphan_retries; extern int sysctl_tcp_syncookies; -extern int sysctl_tcp_fastopen; extern int sysctl_tcp_retrans_collapse; extern int sysctl_tcp_stdurg; extern int sysctl_tcp_rfc1337; diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 01f0a374847b..81efc146b6ef 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -193,7 +193,7 @@ int inet_listen(struct socket *sock, int backlog) { struct sock *sk = sock->sk; unsigned char old_state; - int err; + int err, tcp_fastopen; lock_sock(sk); @@ -216,14 +216,15 @@ int inet_listen(struct socket *sock, int backlog) * socket was in TCP_LISTEN state previously but was * shutdown() (rather than close()). */ - if ((sysctl_tcp_fastopen & TFO_SERVER_ENABLE) != 0 && + tcp_fastopen = sock_net(sk)->ipv4.sysctl_tcp_fastopen; + if ((tcp_fastopen & TFO_SERVER_ENABLE) != 0 && inet_csk(sk)->icsk_accept_queue.fastopenq == NULL) { - if ((sysctl_tcp_fastopen & TFO_SERVER_WO_SOCKOPT1) != 0) + if ((tcp_fastopen & TFO_SERVER_WO_SOCKOPT1) != 0) err = fastopen_init_queue(sk, backlog); - else if ((sysctl_tcp_fastopen & + else if ((tcp_fastopen & TFO_SERVER_WO_SOCKOPT2) != 0) err = fastopen_init_queue(sk, - ((uint)sysctl_tcp_fastopen) >> 16); + ((uint)tcp_fastopen) >> 16); else err = 0; if (err) diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index d6fa49df1ef0..f53f7d476208 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -425,13 +425,6 @@ static struct ctl_table ipv4_table[] = { .proc_handler = proc_dointvec_immutable, }, #endif - { - .procname = "tcp_fastopen", - .data = _tcp_fastopen, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = proc_dointvec, - }, { .procname = "tcp_fastopen_key", .mode = 0600, @@ -974,6 +967,13 @@ static struct ctl_table ipv4_net_table[] = { .extra1 = _min_snd_mss_min, .extra2 = _min_snd_mss_max, }, + { + .procname = "tcp_fastopen", + .data = _net.ipv4.sysctl_tcp_fastopen, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec, + }, { } }; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index edc80e6b056a..e263e7188173 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1054,7
[Devel] [PATCH RHEL7 COMMIT] ploop: Allow to set discard_granuality for io_kaio
The commit is pushed to "branch-rh7-3.10.0-1127.18.2.vz7.163.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-1127.18.2.vz7.163.13 --> commit 7504c11a29a3975ccf2a90f9c48873c3bade9e84 Author: Kirill Tkhai Date: Fri Aug 28 07:38:16 2020 +0300 ploop: Allow to set discard_granuality for io_kaio Here is a problem we call autoconfigure on PLOOP_IOC_START, so it may rewrite user written data, which was made before. https://jira.sw.ru/browse/PSBM-105347 Signed-off-by: Kirill Tkhai --- drivers/block/ploop/io_kaio.c | 51 ++-- drivers/block/ploop/sysfs.c | 79 ++- 2 files changed, 95 insertions(+), 35 deletions(-) diff --git a/drivers/block/ploop/io_kaio.c b/drivers/block/ploop/io_kaio.c index 2f6164c..6cfd9a6 100644 --- a/drivers/block/ploop/io_kaio.c +++ b/drivers/block/ploop/io_kaio.c @@ -1138,42 +1138,25 @@ static void kaio_queue_settings(struct ploop_io * io, struct request_queue * q) struct inode *inode = file->f_mapping->host; if (inode->i_sb->s_magic == EXT4_SUPER_MAGIC) { - blk_queue_stack_limits(q, bdev_get_queue(io->files.bdev)); - /* -* There is no a way to force block engine to split a request -* to fit a single cluster, when discard granuality is 4K -* (inherited from fs block size in blk_queue_stack_limits()). -* So, ploop_make_request() splits them. -*/ - io->plo->force_split_discard_reqs = true; + unsigned int max_discard_sectors = q->limits.max_discard_sectors; + unsigned int discard_granularity = q->limits.discard_granularity; + /* -* Why not (1 << io->plo->cluster_log)? -* Someone may want to clear indexes in case of a request -* is big enough to fit the whole cluster. -* In case of max_discard_sectors is 1 cluster, a request -* for [cluster_start - 4K, cluster_start + cluster_size) -* at block level will be splitted in two requests: -* -* [cluster_start - 4K, cluster_start + cluster_size - 4K) -* [cluster_start + cluster_size - 4K, cluster_start + cluster_size) -* -* Then, ploop_make_request() splits the first of them in two -* to fit a single cluster, so all three requests will be smaller -* then 1 cluster, and no index will be cleared. -* -* Note, this does not solve a problem, when a request covers -* 3 clusters: [cluster_start - 4K, cluster_start + 2 * cluster_size], -* so the third cluster's index will remain. This will require -* unlimited max_discard_sectors and splitting every request -* in ploop_make_request(). We don't want that in that context. -* -* But even in current view, this makes indexes to be cleared -* more frequently, and index-clearing code will be tested better. -* -* Anyway, in general this may be an excess functionality. -* If it's so, it will be dropped later. +* It would be better to call this function not only on start +* like now (on every top delta update, e.g. before start). +* But this is difficult with two engines and different holes +* policy. This should be reworked after we switch to io_kaio +* completely. */ - q->limits.max_discard_sectors = (1 << io->plo->cluster_log) * 2 - 1; + blk_queue_stack_limits(q, bdev_get_queue(io->files.bdev)); + if (discard_granularity) { + /* Restore user values set before PLOOP_IOC_START */ + q->limits.max_discard_sectors = max_discard_sectors; + q->limits.discard_granularity = discard_granularity; + } else { + /* Set defaults */ + ploop_set_discard_limits(io->plo); + } return; } diff --git a/drivers/block/ploop/sysfs.c b/drivers/block/ploop/sysfs.c index 3fadf40..9a1c01d 100644 --- a/drivers/block/ploop/sysfs.c +++ b/drivers/block/ploop/sysfs.c @@ -373,6 +373,83 @@ static u32 show_discard_granularity(struct ploop_device * plo) return plo->queue->limits.discard_granularity; } +static int store_discard_granularity(struct ploop_device *plo, u32 val) +{ + struct ploop_delta *delta; + struct request_queue *q; + struct inode *inode; + int ret = 0; + + mutex_lock(>ctl_mutex); + q = plo->queue; + if (val == q->limits.discard_granularity) + goto
[Devel] [PATCH RHEL7 COMMIT] ploop: Zero discard limits on stop
The commit is pushed to "branch-rh7-3.10.0-1127.18.2.vz7.163.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-1127.18.2.vz7.163.13 --> commit d7a0f0fa86d86437fae13afd33de0fe0dbaff1fe Author: Kirill Tkhai Date: Fri Aug 28 07:38:10 2020 +0300 ploop: Zero discard limits on stop So, next start will be able to differ manually set parameters from start defaults. Also add the same on start just to underline they are allocated zeroed. https://jira.sw.ru/browse/PSBM-105347 Signed-off-by: Kirill Tkhai --- drivers/block/ploop/dev.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c index 64127fa..d999bff 100644 --- a/drivers/block/ploop/dev.c +++ b/drivers/block/ploop/dev.c @@ -4249,6 +4249,7 @@ out_err: static int ploop_stop(struct ploop_device * plo, struct block_device *bdev) { + struct request_queue *q = plo->queue; int p, active_reqs; struct ploop_delta * delta; int cnt; @@ -4309,6 +4310,9 @@ static int ploop_stop(struct ploop_device * plo, struct block_device *bdev) plo->tune.trusted = 0; + q->limits.discard_granularity = 0; + q->limits.max_discard_sectors = 0; + clear_bit(PLOOP_S_PUSH_BACKUP, >state); ploop_pb_stop(plo->pbd, true); @@ -5644,6 +5648,8 @@ static struct ploop_device *__ploop_dev_alloc(int index) KOBJECT_INIT(>kobj, _ktype); atomic_inc(_count); bio_list_init(>bio_discard_list); + plo->queue->limits.discard_granularity = 0; + plo->queue->limits.max_discard_sectors = 0; dk->major = ploop_major; dk->first_minor = index << PLOOP_PART_SHIFT; ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel
[Devel] [PATCH RHEL7 COMMIT] ploop: Clear PLOOP_S_NO_FALLOC_DISCARD on restart
The commit is pushed to "branch-rh7-3.10.0-1127.18.2.vz7.163.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-1127.18.2.vz7.163.13 --> commit c186d0585d7f98c0eb8153e4bfb82159c4f8a9b4 Author: Kirill Tkhai Date: Fri Aug 28 07:37:54 2020 +0300 ploop: Clear PLOOP_S_NO_FALLOC_DISCARD on restart It looks there is no a better place to do that, since we do not remove device after it becomes unused (stop+last delta is removed). This is indicator of cached ploop device was reused for another mount. https://jira.sw.ru/browse/PSBM-105347 Signed-off-by: Kirill Tkhai --- drivers/block/ploop/dev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c index 197faa5..64127fa 100644 --- a/drivers/block/ploop/dev.c +++ b/drivers/block/ploop/dev.c @@ -3420,8 +3420,10 @@ static int ploop_add_delta(struct ploop_device * plo, unsigned long arg) if (err) goto out_destroy; - if (list_empty(>map.delta_list)) + if (list_empty(>map.delta_list)) { plo->fmt_version = PLOOP_FMT_UNDEFINED; + clear_bit(PLOOP_S_NO_FALLOC_DISCARD, >plo->state); + } err = delta->ops->open(delta); if (err) ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel
[Devel] [PATCH RHEL7 COMMIT] ploop: Move v1 PLOOP_S_NO_FALLOC_DISCARD to ploop1_open()
The commit is pushed to "branch-rh7-3.10.0-1127.18.2.vz7.163.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-1127.18.2.vz7.163.13 --> commit 15b40e1f148033ddc21f6207970d334930ba1196 Author: Kirill Tkhai Date: Fri Aug 28 07:38:05 2020 +0300 ploop: Move v1 PLOOP_S_NO_FALLOC_DISCARD to ploop1_open() Every delta comes thru open stage, so we may move the assignment there. https://jira.sw.ru/browse/PSBM-105347 Signed-off-by: Kirill Tkhai --- drivers/block/ploop/fmt_ploop1.c | 10 -- 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/block/ploop/fmt_ploop1.c b/drivers/block/ploop/fmt_ploop1.c index 29c3166..ab8e182 100644 --- a/drivers/block/ploop/fmt_ploop1.c +++ b/drivers/block/ploop/fmt_ploop1.c @@ -175,12 +175,6 @@ static int populate_holes_bitmap(struct ploop_delta *delta, if (test_bit(PLOOP_S_NO_FALLOC_DISCARD, >plo->state)) return 0; - /* To do: add discard alignment for v1 */ - if (delta->plo->fmt_version != PLOOP_FMT_V2) { - set_bit(PLOOP_S_NO_FALLOC_DISCARD, >plo->state); - return 0; - } - ret = -ENOMEM; /* Use multiplier 10 for bigger batch and better performance */ nr_all_pages = 10 * cluster_size_in_bytes(delta->plo) / PAGE_SIZE; @@ -338,6 +332,10 @@ ploop1_open(struct ploop_delta * delta) delta->io.files.inode->i_sb->s_magic == FUSE_SUPER_MAGIC) set_bit(PLOOP_S_NO_FALLOC_DISCARD, >plo->state); + /* TODO: add discard alignment for v1 */ + if (delta->plo->fmt_version != PLOOP_FMT_V2) + set_bit(PLOOP_S_NO_FALLOC_DISCARD, >plo->state); + return 0; out_err: ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel
[Devel] [PATCH RHEL7 COMMIT] ploop: Refactoring in ploop1_open()
The commit is pushed to "branch-rh7-3.10.0-1127.18.2.vz7.163.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-1127.18.2.vz7.163.13 --> commit c47bfbf418f5191f9f2271c64dce61b9af504bec Author: Kirill Tkhai Date: Fri Aug 28 07:38:00 2020 +0300 ploop: Refactoring in ploop1_open() This is not refactoring for external modules only, if there is one. https://jira.sw.ru/browse/PSBM-105347 Signed-off-by: Kirill Tkhai --- drivers/block/ploop/fmt_ploop1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/block/ploop/fmt_ploop1.c b/drivers/block/ploop/fmt_ploop1.c index 0036e09..29c3166 100644 --- a/drivers/block/ploop/fmt_ploop1.c +++ b/drivers/block/ploop/fmt_ploop1.c @@ -334,8 +334,8 @@ ploop1_open(struct ploop_delta * delta) delta->flags |= PLOOP_FMT_PREALLOCATED; /* FIXME: is there a better place for this? */ - if (delta->io.ops->id != PLOOP_IO_DIRECT && - delta->io.files.inode->i_sb->s_magic != EXT4_SUPER_MAGIC) + if (delta->io.ops->id == PLOOP_IO_KAIO && + delta->io.files.inode->i_sb->s_magic == FUSE_SUPER_MAGIC) set_bit(PLOOP_S_NO_FALLOC_DISCARD, >plo->state); return 0; ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel