diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/partitions/check.c | 4 | ||||
| -rw-r--r-- | fs/sysfs/dir.c | 1 | ||||
| -rw-r--r-- | fs/sysfs/file.c | 6 |
3 files changed, 8 insertions, 3 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 03f808c5b79d..6149e4b58c88 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
| @@ -473,6 +473,10 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) | |||
| 473 | return 0; | 473 | return 0; |
| 474 | if (IS_ERR(state)) /* I/O error reading the partition table */ | 474 | if (IS_ERR(state)) /* I/O error reading the partition table */ |
| 475 | return -EIO; | 475 | return -EIO; |
| 476 | |||
| 477 | /* tell userspace that the media / partition table may have changed */ | ||
| 478 | kobject_uevent(&disk->dev.kobj, KOBJ_CHANGE); | ||
| 479 | |||
| 476 | for (p = 1; p < state->limit; p++) { | 480 | for (p = 1; p < state->limit; p++) { |
| 477 | sector_t size = state->parts[p].size; | 481 | sector_t size = state->parts[p].size; |
| 478 | sector_t from = state->parts[p].from; | 482 | sector_t from = state->parts[p].from; |
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c index 4948d9bc405d..a1c3a1fab7f0 100644 --- a/fs/sysfs/dir.c +++ b/fs/sysfs/dir.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/idr.h> | 20 | #include <linux/idr.h> |
| 21 | #include <linux/completion.h> | 21 | #include <linux/completion.h> |
| 22 | #include <linux/mutex.h> | 22 | #include <linux/mutex.h> |
| 23 | #include <linux/slab.h> | ||
| 23 | #include "sysfs.h" | 24 | #include "sysfs.h" |
| 24 | 25 | ||
| 25 | DEFINE_MUTEX(sysfs_mutex); | 26 | DEFINE_MUTEX(sysfs_mutex); |
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index baa663e69388..ade9a7e6a757 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
| 14 | #include <linux/kobject.h> | 14 | #include <linux/kobject.h> |
| 15 | #include <linux/kallsyms.h> | 15 | #include <linux/kallsyms.h> |
| 16 | #include <linux/slab.h> | ||
| 16 | #include <linux/namei.h> | 17 | #include <linux/namei.h> |
| 17 | #include <linux/poll.h> | 18 | #include <linux/poll.h> |
| 18 | #include <linux/list.h> | 19 | #include <linux/list.h> |
| @@ -128,7 +129,7 @@ sysfs_read_file(struct file *file, char __user *buf, size_t count, loff_t *ppos) | |||
| 128 | ssize_t retval = 0; | 129 | ssize_t retval = 0; |
| 129 | 130 | ||
| 130 | mutex_lock(&buffer->mutex); | 131 | mutex_lock(&buffer->mutex); |
| 131 | if (buffer->needs_read_fill) { | 132 | if (buffer->needs_read_fill || *ppos == 0) { |
| 132 | retval = fill_read_buffer(file->f_path.dentry,buffer); | 133 | retval = fill_read_buffer(file->f_path.dentry,buffer); |
| 133 | if (retval) | 134 | if (retval) |
| 134 | goto out; | 135 | goto out; |
| @@ -409,8 +410,7 @@ static int sysfs_release(struct inode *inode, struct file *filp) | |||
| 409 | * return POLLERR|POLLPRI, and select will return the fd whether | 410 | * return POLLERR|POLLPRI, and select will return the fd whether |
| 410 | * it is waiting for read, write, or exceptions. | 411 | * it is waiting for read, write, or exceptions. |
| 411 | * Once poll/select indicates that the value has changed, you | 412 | * Once poll/select indicates that the value has changed, you |
| 412 | * 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. |
| 413 | * again will not get new data, or reset the state of 'poll'. | ||
| 414 | * Reminder: this only works for attributes which actively support | 414 | * Reminder: this only works for attributes which actively support |
| 415 | * 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 |
| 416 | * to see if it supports poll (Neither 'poll' nor 'select' return | 416 | * to see if it supports poll (Neither 'poll' nor 'select' return |
