Lines Matching refs:fiq
195 u64 fuse_get_unique(struct fuse_iqueue *fiq)
197 fiq->reqctr += FUSE_REQ_ID_STEP;
198 return fiq->reqctr;
208 * A new request is available, wake fiq->waitq
210 static void fuse_dev_wake_and_unlock(struct fuse_iqueue *fiq)
211 __releases(fiq->lock)
213 wake_up(&fiq->waitq);
214 kill_fasync(&fiq->fasync, SIGIO, POLL_IN);
215 spin_unlock(&fiq->lock);
225 static void queue_request_and_unlock(struct fuse_iqueue *fiq,
227 __releases(fiq->lock)
232 list_add_tail(&req->list, &fiq->pending);
233 fiq->ops->wake_pending_and_unlock(fiq);
239 struct fuse_iqueue *fiq = &fc->iq;
244 spin_lock(&fiq->lock);
245 if (fiq->connected) {
246 fiq->forget_list_tail->next = forget;
247 fiq->forget_list_tail = forget;
248 fiq->ops->wake_forget_and_unlock(fiq);
251 spin_unlock(&fiq->lock);
257 struct fuse_iqueue *fiq = &fc->iq;
266 spin_lock(&fiq->lock);
267 req->in.h.unique = fuse_get_unique(fiq);
268 queue_request_and_unlock(fiq, req);
284 struct fuse_iqueue *fiq = &fc->iq;
295 spin_lock(&fiq->lock);
297 spin_unlock(&fiq->lock);
340 struct fuse_iqueue *fiq = &req->fm->fc->iq;
342 spin_lock(&fiq->lock);
345 spin_unlock(&fiq->lock);
350 list_add_tail(&req->intr_entry, &fiq->interrupts);
358 spin_unlock(&fiq->lock);
361 fiq->ops->wake_interrupt_and_unlock(fiq);
363 spin_unlock(&fiq->lock);
371 struct fuse_iqueue *fiq = &fc->iq;
395 spin_lock(&fiq->lock);
399 spin_unlock(&fiq->lock);
404 spin_unlock(&fiq->lock);
416 struct fuse_iqueue *fiq = &req->fm->fc->iq;
419 spin_lock(&fiq->lock);
420 if (!fiq->connected) {
421 spin_unlock(&fiq->lock);
424 req->in.h.unique = fuse_get_unique(fiq);
428 queue_request_and_unlock(fiq, req);
589 struct fuse_iqueue *fiq = &fm->fc->iq;
601 spin_lock(&fiq->lock);
602 if (fiq->connected) {
603 queue_request_and_unlock(fiq, req);
606 spin_unlock(&fiq->lock);
1039 static int forget_pending(struct fuse_iqueue *fiq)
1041 return fiq->forget_list_head.next != NULL;
1044 static int request_pending(struct fuse_iqueue *fiq)
1046 return !list_empty(&fiq->pending) || !list_empty(&fiq->interrupts) ||
1047 forget_pending(fiq);
1056 * Called with fiq->lock held, releases it
1058 static int fuse_read_interrupt(struct fuse_iqueue *fiq,
1061 __releases(fiq->lock)
1076 spin_unlock(&fiq->lock);
1088 struct fuse_forget_link *fuse_dequeue_forget(struct fuse_iqueue *fiq,
1092 struct fuse_forget_link *head = fiq->forget_list_head.next;
1099 fiq->forget_list_head.next = *newhead;
1101 if (fiq->forget_list_head.next == NULL)
1102 fiq->forget_list_tail = &fiq->forget_list_head;
1111 static int fuse_read_single_forget(struct fuse_iqueue *fiq,
1114 __releases(fiq->lock)
1117 struct fuse_forget_link *forget = fuse_dequeue_forget(fiq, 1, NULL);
1124 .unique = fuse_get_unique(fiq),
1128 spin_unlock(&fiq->lock);
1144 static int fuse_read_batch_forget(struct fuse_iqueue *fiq,
1146 __releases(fiq->lock)
1155 .unique = fuse_get_unique(fiq),
1160 spin_unlock(&fiq->lock);
1165 head = fuse_dequeue_forget(fiq, max_forgets, &count);
1166 spin_unlock(&fiq->lock);
1193 static int fuse_read_forget(struct fuse_conn *fc, struct fuse_iqueue *fiq,
1196 __releases(fiq->lock)
1198 if (fc->minor < 16 || fiq->forget_list_head.next->next == NULL)
1199 return fuse_read_single_forget(fiq, cs, nbytes);
1201 return fuse_read_batch_forget(fiq, cs, nbytes);
1218 struct fuse_iqueue *fiq = &fc->iq;
1245 spin_lock(&fiq->lock);
1246 if (!fiq->connected || request_pending(fiq))
1248 spin_unlock(&fiq->lock);
1252 err = wait_event_interruptible_exclusive(fiq->waitq,
1253 !fiq->connected || request_pending(fiq));
1258 if (!fiq->connected) {
1263 if (!list_empty(&fiq->interrupts)) {
1264 req = list_entry(fiq->interrupts.next, struct fuse_req,
1266 return fuse_read_interrupt(fiq, cs, nbytes, req);
1269 if (forget_pending(fiq)) {
1270 if (list_empty(&fiq->pending) || fiq->forget_batch-- > 0)
1271 return fuse_read_forget(fc, fiq, cs, nbytes);
1273 if (fiq->forget_batch <= -8)
1274 fiq->forget_batch = 16;
1277 req = list_entry(fiq->pending.next, struct fuse_req, list);
1280 spin_unlock(&fiq->lock);
1347 spin_unlock(&fiq->lock);
2071 struct fuse_iqueue *fiq;
2077 fiq = &fud->fc->iq;
2078 poll_wait(file, &fiq->waitq, wait);
2080 spin_lock(&fiq->lock);
2081 if (!fiq->connected)
2083 else if (request_pending(fiq))
2085 spin_unlock(&fiq->lock);
2138 struct fuse_iqueue *fiq = &fc->iq;
2180 spin_lock(&fiq->lock);
2181 fiq->connected = 0;
2182 list_for_each_entry(req, &fiq->pending, list)
2184 list_splice_tail_init(&fiq->pending, &to_end);
2185 while (forget_pending(fiq))
2186 kfree(fuse_dequeue_forget(fiq, 1, NULL));
2187 wake_up_all(&fiq->waitq);
2188 spin_unlock(&fiq->lock);
2189 kill_fasync(&fiq->fasync, SIGIO, POLL_IN);