cgroup: Zero sized write should be no-op
authorJouni Roivas <jouni.roivas@tuxera.com>
Wed, 30 Sep 2020 16:42:42 +0000 (19:42 +0300)
committerTejun Heo <tj@kernel.org>
Wed, 30 Sep 2020 17:52:06 +0000 (13:52 -0400)
commit65026da59cda16baf6c3e98b74ec439f366e468f
treeaf1f3541bd29d65b1219a383c8c184de10749f55
parent95d325185c06cbef1c5be97825265a7129a03512
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: Jouni Roivas <jouni.roivas@tuxera.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup/cgroup.c