[Devel] [PATCH rh7] cgroup: add missing dput() in cgroup_unmark_ve_roots()

2020-08-28 Thread Andrey Ryabinin
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

2020-08-28 Thread Konstantin Khorenko
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

2020-08-28 Thread Vasily Averin
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

2020-08-28 Thread Vasily Averin
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

2020-08-28 Thread Vasily Averin
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()

2020-08-28 Thread Vasily Averin
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()

2020-08-28 Thread Vasily Averin
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