From: Vladimir Zapolskiy Date: Wed, 24 Sep 2014 15:21:04 +0000 (+0300) Subject: fs: sysfs: return EGBIG on write if offset is larger than file size X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=0936896056365349afa867c16e9f9100a6707cbf;p=deliverable%2Flinux.git fs: sysfs: return EGBIG on write if offset is larger than file size According to the user expectations common utilities like dd or sh redirection operator > should work correctly over binary files from sysfs. At the moment doing excessive write can not be completed: write(1, "\0\0\0\0\0\0\0\0", 8) = 4 write(1, "\0\0\0\0", 4) = 0 write(1, "\0\0\0\0", 4) = 0 write(1, "\0\0\0\0", 4) = 0 ... Fix the problem by returning EFBIG described in man 2 write. Signed-off-by: Vladimir Zapolskiy Cc: Greg Kroah-Hartman Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index e9ef59b3abb1..589abee16a39 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c @@ -125,7 +125,7 @@ static ssize_t sysfs_kf_bin_write(struct kernfs_open_file *of, char *buf, if (size) { if (size <= pos) - return 0; + return -EFBIG; count = min_t(ssize_t, count, size - pos); } if (!count)