aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/mon/mon_main.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-06-24 08:41:41 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-06-24 13:07:53 -0400
commit816724e65c72a90a44fbad0ef0b59b186c85fa90 (patch)
tree421fa29aedff988e392f92780637553e275d37a0 /drivers/usb/mon/mon_main.c
parent70ac4385a13f78bc478f26d317511893741b05bd (diff)
parentd384ea691fe4ea8c2dd5b9b8d9042eb181776f18 (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.c23
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 */
116static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int err) 117static 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
141out_locked:
142 spin_unlock_irqrestore(&mbus->lock, flags);
130out_unlocked: 143out_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 */
168static void mon_stop(struct mon_bus *mbus) 181static void mon_stop(struct mon_bus *mbus)
169{ 182{