diff options
Diffstat (limited to 'fs/sysfs/file.c')
-rw-r--r-- | fs/sysfs/file.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index b803213d1307..39c75a86c67f 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
@@ -108,7 +108,7 @@ static ssize_t sysfs_kf_read(struct kernfs_open_file *of, char *buf, | |||
108 | { | 108 | { |
109 | const struct sysfs_ops *ops = sysfs_file_ops(of->kn); | 109 | const struct sysfs_ops *ops = sysfs_file_ops(of->kn); |
110 | struct kobject *kobj = of->kn->parent->priv; | 110 | struct kobject *kobj = of->kn->parent->priv; |
111 | size_t len; | 111 | ssize_t len; |
112 | 112 | ||
113 | /* | 113 | /* |
114 | * If buf != of->prealloc_buf, we don't know how | 114 | * If buf != of->prealloc_buf, we don't know how |
@@ -117,13 +117,15 @@ static ssize_t sysfs_kf_read(struct kernfs_open_file *of, char *buf, | |||
117 | if (WARN_ON_ONCE(buf != of->prealloc_buf)) | 117 | if (WARN_ON_ONCE(buf != of->prealloc_buf)) |
118 | return 0; | 118 | return 0; |
119 | len = ops->show(kobj, of->kn->priv, buf); | 119 | len = ops->show(kobj, of->kn->priv, buf); |
120 | if (len < 0) | ||
121 | return len; | ||
120 | if (pos) { | 122 | if (pos) { |
121 | if (len <= pos) | 123 | if (len <= pos) |
122 | return 0; | 124 | return 0; |
123 | len -= pos; | 125 | len -= pos; |
124 | memmove(buf, buf + pos, len); | 126 | memmove(buf, buf + pos, len); |
125 | } | 127 | } |
126 | return min(count, len); | 128 | return min_t(ssize_t, count, len); |
127 | } | 129 | } |
128 | 130 | ||
129 | /* kernfs write callback for regular sysfs files */ | 131 | /* kernfs write callback for regular sysfs files */ |