diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/sysfs/file.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index a859c32ff93a..ade9a7e6a757 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
@@ -129,7 +129,7 @@ sysfs_read_file(struct file *file, char __user *buf, size_t count, loff_t *ppos) | |||
129 | ssize_t retval = 0; | 129 | ssize_t retval = 0; |
130 | 130 | ||
131 | mutex_lock(&buffer->mutex); | 131 | mutex_lock(&buffer->mutex); |
132 | if (buffer->needs_read_fill) { | 132 | if (buffer->needs_read_fill || *ppos == 0) { |
133 | retval = fill_read_buffer(file->f_path.dentry,buffer); | 133 | retval = fill_read_buffer(file->f_path.dentry,buffer); |
134 | if (retval) | 134 | if (retval) |
135 | goto out; | 135 | goto out; |
@@ -410,8 +410,7 @@ static int sysfs_release(struct inode *inode, struct file *filp) | |||
410 | * return POLLERR|POLLPRI, and select will return the fd whether | 410 | * return POLLERR|POLLPRI, and select will return the fd whether |
411 | * it is waiting for read, write, or exceptions. | 411 | * it is waiting for read, write, or exceptions. |
412 | * Once poll/select indicates that the value has changed, you | 412 | * Once poll/select indicates that the value has changed, you |
413 | * need to close and re-open the file, as simply seeking and reading | 413 | * need to close and re-open the file, or seek to 0 and read again. |
414 | * again will not get new data, or reset the state of 'poll'. | ||
415 | * Reminder: this only works for attributes which actively support | 414 | * Reminder: this only works for attributes which actively support |
416 | * it, and it is not possible to test an attribute from userspace | 415 | * it, and it is not possible to test an attribute from userspace |
417 | * to see if it supports poll (Neither 'poll' nor 'select' return | 416 | * to see if it supports poll (Neither 'poll' nor 'select' return |