diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-24 08:41:41 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-24 13:07:53 -0400 |
commit | 816724e65c72a90a44fbad0ef0b59b186c85fa90 (patch) | |
tree | 421fa29aedff988e392f92780637553e275d37a0 /drivers/usb/mon/mon_main.c | |
parent | 70ac4385a13f78bc478f26d317511893741b05bd (diff) | |
parent | d384ea691fe4ea8c2dd5b9b8d9042eb181776f18 (diff) |
Merge branch 'master' of /home/trondmy/kernel/linux-2.6/
Conflicts:
fs/nfs/inode.c
fs/super.c
Fix conflicts between patch 'NFS: Split fs/nfs/inode.c' and patch
'VFS: Permit filesystem to override root dentry on mount'
Diffstat (limited to 'drivers/usb/mon/mon_main.c')
-rw-r--r-- | drivers/usb/mon/mon_main.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/usb/mon/mon_main.c b/drivers/usb/mon/mon_main.c index 6ecc27302211..275a66f83058 100644 --- a/drivers/usb/mon/mon_main.c +++ b/drivers/usb/mon/mon_main.c | |||
@@ -97,6 +97,7 @@ static void mon_submit(struct usb_bus *ubus, struct urb *urb) | |||
97 | if (mbus->nreaders == 0) | 97 | if (mbus->nreaders == 0) |
98 | goto out_locked; | 98 | goto out_locked; |
99 | 99 | ||
100 | mbus->cnt_events++; | ||
100 | list_for_each (pos, &mbus->r_list) { | 101 | list_for_each (pos, &mbus->r_list) { |
101 | r = list_entry(pos, struct mon_reader, r_link); | 102 | r = list_entry(pos, struct mon_reader, r_link); |
102 | r->rnf_submit(r->r_data, urb); | 103 | r->rnf_submit(r->r_data, urb); |
@@ -113,20 +114,32 @@ out_unlocked: | |||
113 | 114 | ||
114 | /* | 115 | /* |
115 | */ | 116 | */ |
116 | static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int err) | 117 | static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int error) |
117 | { | 118 | { |
118 | struct mon_bus *mbus; | 119 | struct mon_bus *mbus; |
120 | unsigned long flags; | ||
121 | struct list_head *pos; | ||
122 | struct mon_reader *r; | ||
119 | 123 | ||
120 | mbus = ubus->mon_bus; | 124 | mbus = ubus->mon_bus; |
121 | if (mbus == NULL) | 125 | if (mbus == NULL) |
122 | goto out_unlocked; | 126 | goto out_unlocked; |
123 | 127 | ||
124 | /* | 128 | spin_lock_irqsave(&mbus->lock, flags); |
125 | * XXX Capture the error code and the 'E' event. | 129 | if (mbus->nreaders == 0) |
126 | */ | 130 | goto out_locked; |
127 | 131 | ||
132 | mbus->cnt_events++; | ||
133 | list_for_each (pos, &mbus->r_list) { | ||
134 | r = list_entry(pos, struct mon_reader, r_link); | ||
135 | r->rnf_error(r->r_data, urb, error); | ||
136 | } | ||
137 | |||
138 | spin_unlock_irqrestore(&mbus->lock, flags); | ||
128 | return; | 139 | return; |
129 | 140 | ||
141 | out_locked: | ||
142 | spin_unlock_irqrestore(&mbus->lock, flags); | ||
130 | out_unlocked: | 143 | out_unlocked: |
131 | return; | 144 | return; |
132 | } | 145 | } |
@@ -152,6 +165,7 @@ static void mon_complete(struct usb_bus *ubus, struct urb *urb) | |||
152 | } | 165 | } |
153 | 166 | ||
154 | spin_lock_irqsave(&mbus->lock, flags); | 167 | spin_lock_irqsave(&mbus->lock, flags); |
168 | mbus->cnt_events++; | ||
155 | list_for_each (pos, &mbus->r_list) { | 169 | list_for_each (pos, &mbus->r_list) { |
156 | r = list_entry(pos, struct mon_reader, r_link); | 170 | r = list_entry(pos, struct mon_reader, r_link); |
157 | r->rnf_complete(r->r_data, urb); | 171 | r->rnf_complete(r->r_data, urb); |
@@ -163,7 +177,6 @@ static void mon_complete(struct usb_bus *ubus, struct urb *urb) | |||
163 | 177 | ||
164 | /* | 178 | /* |
165 | * Stop monitoring. | 179 | * Stop monitoring. |
166 | * Obviously this must be well locked, so no need to play with mb's. | ||
167 | */ | 180 | */ |
168 | static void mon_stop(struct mon_bus *mbus) | 181 | static void mon_stop(struct mon_bus *mbus) |
169 | { | 182 | { |