[Devel,1/2] ve: add boolean "sunrpc_abort" attribute to VE cgroup

Submitted by Stanislav Kinsburskiy on June 23, 2017, 1:03 p.m.

Details

Message ID 20170623130329.25738.91122.stgit@localhost.localdomain
State New
Series "Handle SUNRPC tasks on container stop when network is"
Headers show

Commit Message

Stanislav Kinsburskiy June 23, 2017, 1:03 p.m.
Intended to be used to abort all SUNRPC operations. For example in case of
fast stop with unreachable network.

Signed-off-by: Stanislav Kinsburskiy <skinsbursky@virtuozzo.com>
---
 include/linux/ve.h |    3 +++
 kernel/ve/ve.c     |   15 ++++++++++++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/include/linux/ve.h b/include/linux/ve.h
index 2d8eca6..0eb893d 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -122,6 +122,9 @@  struct ve_struct {
 	int			netns_max_nr;
 	atomic_t		netif_avail_nr;
 	int			netif_max_nr;
+
+	bool			sunrpc_abort;
+
 	/* Number of mounts. May become unbalanced if VE0 mounts something
 	 * and the VE unmounts it. This is acceptable.
 	 */
diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c
index 7cb47fa..7bb02e2 100644
--- a/kernel/ve/ve.c
+++ b/kernel/ve/ve.c
@@ -1216,6 +1216,7 @@  enum {
 	VE_CF_NETNS_NR,
 	VE_CF_NETIF_MAX_NR,
 	VE_CF_NETIF_NR,
+	VE_CF_SUNRPC_ABORT,
 };
 
 static int ve_ts_read(struct cgroup *cg, struct cftype *cft, struct seq_file *m)
@@ -1289,6 +1290,9 @@  static u64 ve_read_u64(struct cgroup *cg, struct cftype *cft)
 		return cgroup_ve(cg)->netif_max_nr;
 	else if (cft->private == VE_CF_NETIF_NR)
 		return atomic_read(&cgroup_ve(cg)->netif_avail_nr);
+	else if (cft->private == VE_CF_SUNRPC_ABORT)
+		return cgroup_ve(cg)->sunrpc_abort;
+
 	return 0;
 }
 
@@ -1380,7 +1384,9 @@  static int _ve_write_u64(struct cgroup *cg, struct cftype *cft,
 
 		ve->netif_max_nr = value;
 		atomic_add(delta, &ve->netif_avail_nr);
-	}
+	} else if (cft->private == VE_CF_SUNRPC_ABORT)
+		ve->sunrpc_abort = (bool)value;
+
 	up_write(&ve->op_sem);
 	return 0;
 }
@@ -1497,6 +1503,13 @@  static struct cftype ve_cftypes[] = {
 		.read_u64		= ve_read_u64,
 		.private		= VE_CF_NETIF_NR,
 	},
+	{
+		.name			= "sunrpc_abort",
+		.flags			= CFTYPE_NOT_ON_ROOT,
+		.read_u64		= ve_read_u64,
+		.write_u64		= ve_write_running_u64,
+		.private		= VE_CF_SUNRPC_ABORT,
+	},
 	{ }
 };