Commit 65026da5 authored by Jouni Roivas's avatar Jouni Roivas Committed by Tejun Heo

cgroup: Zero sized write should be no-op

Do not report failure on zero sized writes, and handle them as no-op.

There's issues for example in case of writev() when there's iovec
containing zero buffer as a first one. It's expected writev() on below
example to successfully perform the write to specified writable cgroup
file expecting integer value, and to return 2. For now it's returning
value -1, and skipping the write:

	int writetest(int fd) {
	  const char *buf1 = "";
	  const char *buf2 = "1\n";
          struct iovec iov[2] = {
                { .iov_base = (void*)buf1, .iov_len = 0 },
                { .iov_base = (void*)buf2, .iov_len = 2 }
          };
	  return writev(fd, iov, 2);
	}

This patch fixes the issue by checking if there's nothing to write,
and handling the write as no-op by just returning 0.
Signed-off-by: default avatarJouni Roivas <jouni.roivas@tuxera.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 95d32518
...@@ -3681,6 +3681,9 @@ static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf, ...@@ -3681,6 +3681,9 @@ static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf,
struct cgroup_subsys_state *css; struct cgroup_subsys_state *css;
int ret; int ret;
if (!nbytes)
return 0;
/* /*
* If namespaces are delegation boundaries, disallow writes to * If namespaces are delegation boundaries, disallow writes to
* files in an non-init namespace root from inside the namespace * files in an non-init namespace root from inside the namespace
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment