diff options
| author | Scott Murray <scottm@somanetworks.com> | 2002-09-19 03:29:16 -0700 |
|---|---|---|
| committer | Scott Murray <scottm@somanetworks.com> | 2002-09-19 03:29:16 -0700 |
| commit | a5231a38568bf2f0ddac27b4f945891e276116ea (patch) | |
| tree | 72e0ab83977de4a4d2dcdf8b37301e47dcaaf993 /drivers/hotplug | |
| parent | 461a50a3af1c0a31f91cc5c5a1c776eadc300333 (diff) | |
[PATCH] Small pcihpfs dnotify fix
I've been working on a userspace daemon to go with my CompactPCI driver,
and yesterday I discovered an oversight in pci_hp_change_slot_info - it
doesn't call dnotify_parent, so dnotify based clients basically don't
work against pcihpfs. The following patch (against 2.5 BK) reworks
things to just update the mtime (since we're modifying the file after
all), and then call dnotify_parent.
Diffstat (limited to 'drivers/hotplug')
| -rw-r--r-- | drivers/hotplug/pci_hotplug_core.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/hotplug/pci_hotplug_core.c b/drivers/hotplug/pci_hotplug_core.c index 15bc11a842c8..625a038cfc85 100644 --- a/drivers/hotplug/pci_hotplug_core.c +++ b/drivers/hotplug/pci_hotplug_core.c @@ -38,6 +38,7 @@ #include <linux/init.h> #include <linux/namei.h> #include <linux/pci.h> +#include <linux/dnotify.h> #include <asm/uaccess.h> #include "pci_hotplug.h" @@ -1012,10 +1013,13 @@ int pci_hp_deregister (struct hotplug_slot *slot) return 0; } -static inline void update_inode_time (struct inode *inode) +static inline void update_dentry_inode_time (struct dentry *dentry) { - if (inode) - inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME; + struct inode *inode = dentry->d_inode; + if (inode) { + inode->i_mtime = CURRENT_TIME; + dnotify_parent(dentry, DN_MODIFY); + } } /** @@ -1050,16 +1054,16 @@ int pci_hp_change_slot_info (const char *name, struct hotplug_slot_info *info) core = temp->core_priv; if ((core->power_dentry) && (temp->info->power_status != info->power_status)) - update_inode_time (core->power_dentry->d_inode); + update_dentry_inode_time (core->power_dentry); if ((core->attention_dentry) && (temp->info->attention_status != info->attention_status)) - update_inode_time (core->attention_dentry->d_inode); + update_dentry_inode_time (core->attention_dentry); if ((core->latch_dentry) && (temp->info->latch_status != info->latch_status)) - update_inode_time (core->latch_dentry->d_inode); + update_dentry_inode_time (core->latch_dentry); if ((core->adapter_dentry) && (temp->info->adapter_status != info->adapter_status)) - update_inode_time (core->adapter_dentry->d_inode); + update_dentry_inode_time (core->adapter_dentry); memcpy (temp->info, info, sizeof (struct hotplug_slot_info)); spin_unlock (&list_lock); |
