Lines Matching refs:fiq
191 u64 fuse_get_unique(struct fuse_iqueue *fiq) in fuse_get_unique() argument
193 fiq->reqctr += FUSE_REQ_ID_STEP; in fuse_get_unique()
194 return fiq->reqctr; in fuse_get_unique()
206 static void fuse_dev_wake_and_unlock(struct fuse_iqueue *fiq) in fuse_dev_wake_and_unlock() argument
207 __releases(fiq->lock) in fuse_dev_wake_and_unlock()
209 wake_up(&fiq->waitq); in fuse_dev_wake_and_unlock()
210 kill_fasync(&fiq->fasync, SIGIO, POLL_IN); in fuse_dev_wake_and_unlock()
211 spin_unlock(&fiq->lock); in fuse_dev_wake_and_unlock()
221 static void queue_request_and_unlock(struct fuse_iqueue *fiq, in queue_request_and_unlock() argument
223 __releases(fiq->lock) in queue_request_and_unlock()
228 list_add_tail(&req->list, &fiq->pending); in queue_request_and_unlock()
229 fiq->ops->wake_pending_and_unlock(fiq); in queue_request_and_unlock()
235 struct fuse_iqueue *fiq = &fc->iq; in fuse_queue_forget() local
240 spin_lock(&fiq->lock); in fuse_queue_forget()
241 if (fiq->connected) { in fuse_queue_forget()
242 fiq->forget_list_tail->next = forget; in fuse_queue_forget()
243 fiq->forget_list_tail = forget; in fuse_queue_forget()
244 fiq->ops->wake_forget_and_unlock(fiq); in fuse_queue_forget()
247 spin_unlock(&fiq->lock); in fuse_queue_forget()
253 struct fuse_iqueue *fiq = &fc->iq; in flush_bg_queue() local
262 spin_lock(&fiq->lock); in flush_bg_queue()
263 req->in.h.unique = fuse_get_unique(fiq); in flush_bg_queue()
264 queue_request_and_unlock(fiq, req); in flush_bg_queue()
278 struct fuse_iqueue *fiq = &fc->iq; in fuse_request_end() local
291 spin_lock(&fiq->lock); in fuse_request_end()
293 spin_unlock(&fiq->lock); in fuse_request_end()
334 static int queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req) in queue_interrupt() argument
336 spin_lock(&fiq->lock); in queue_interrupt()
339 spin_unlock(&fiq->lock); in queue_interrupt()
344 list_add_tail(&req->intr_entry, &fiq->interrupts); in queue_interrupt()
352 spin_unlock(&fiq->lock); in queue_interrupt()
355 fiq->ops->wake_interrupt_and_unlock(fiq); in queue_interrupt()
357 spin_unlock(&fiq->lock); in queue_interrupt()
364 struct fuse_iqueue *fiq = &fc->iq; in request_wait_answer() local
378 queue_interrupt(fiq, req); in request_wait_answer()
388 spin_lock(&fiq->lock); in request_wait_answer()
392 spin_unlock(&fiq->lock); in request_wait_answer()
397 spin_unlock(&fiq->lock); in request_wait_answer()
409 struct fuse_iqueue *fiq = &fc->iq; in __fuse_request_send() local
412 spin_lock(&fiq->lock); in __fuse_request_send()
413 if (!fiq->connected) { in __fuse_request_send()
414 spin_unlock(&fiq->lock); in __fuse_request_send()
417 req->in.h.unique = fuse_get_unique(fiq); in __fuse_request_send()
421 queue_request_and_unlock(fiq, req); in __fuse_request_send()
576 struct fuse_iqueue *fiq = &fc->iq; in fuse_simple_notify_reply() local
588 spin_lock(&fiq->lock); in fuse_simple_notify_reply()
589 if (fiq->connected) { in fuse_simple_notify_reply()
590 queue_request_and_unlock(fiq, req); in fuse_simple_notify_reply()
593 spin_unlock(&fiq->lock); in fuse_simple_notify_reply()
1002 static int forget_pending(struct fuse_iqueue *fiq) in forget_pending() argument
1004 return fiq->forget_list_head.next != NULL; in forget_pending()
1007 static int request_pending(struct fuse_iqueue *fiq) in request_pending() argument
1009 return !list_empty(&fiq->pending) || !list_empty(&fiq->interrupts) || in request_pending()
1010 forget_pending(fiq); in request_pending()
1021 static int fuse_read_interrupt(struct fuse_iqueue *fiq, in fuse_read_interrupt() argument
1024 __releases(fiq->lock) in fuse_read_interrupt()
1039 spin_unlock(&fiq->lock); in fuse_read_interrupt()
1051 struct fuse_forget_link *fuse_dequeue_forget(struct fuse_iqueue *fiq, in fuse_dequeue_forget() argument
1055 struct fuse_forget_link *head = fiq->forget_list_head.next; in fuse_dequeue_forget()
1062 fiq->forget_list_head.next = *newhead; in fuse_dequeue_forget()
1064 if (fiq->forget_list_head.next == NULL) in fuse_dequeue_forget()
1065 fiq->forget_list_tail = &fiq->forget_list_head; in fuse_dequeue_forget()
1074 static int fuse_read_single_forget(struct fuse_iqueue *fiq, in fuse_read_single_forget() argument
1077 __releases(fiq->lock) in fuse_read_single_forget()
1080 struct fuse_forget_link *forget = fuse_dequeue_forget(fiq, 1, NULL); in fuse_read_single_forget()
1087 .unique = fuse_get_unique(fiq), in fuse_read_single_forget()
1091 spin_unlock(&fiq->lock); in fuse_read_single_forget()
1107 static int fuse_read_batch_forget(struct fuse_iqueue *fiq, in fuse_read_batch_forget() argument
1109 __releases(fiq->lock) in fuse_read_batch_forget()
1118 .unique = fuse_get_unique(fiq), in fuse_read_batch_forget()
1123 spin_unlock(&fiq->lock); in fuse_read_batch_forget()
1128 head = fuse_dequeue_forget(fiq, max_forgets, &count); in fuse_read_batch_forget()
1129 spin_unlock(&fiq->lock); in fuse_read_batch_forget()
1156 static int fuse_read_forget(struct fuse_conn *fc, struct fuse_iqueue *fiq, in fuse_read_forget() argument
1159 __releases(fiq->lock) in fuse_read_forget()
1161 if (fc->minor < 16 || fiq->forget_list_head.next->next == NULL) in fuse_read_forget()
1162 return fuse_read_single_forget(fiq, cs, nbytes); in fuse_read_forget()
1164 return fuse_read_batch_forget(fiq, cs, nbytes); in fuse_read_forget()
1181 struct fuse_iqueue *fiq = &fc->iq; in fuse_dev_do_read() local
1208 spin_lock(&fiq->lock); in fuse_dev_do_read()
1209 if (!fiq->connected || request_pending(fiq)) in fuse_dev_do_read()
1211 spin_unlock(&fiq->lock); in fuse_dev_do_read()
1215 err = wait_event_interruptible_exclusive(fiq->waitq, in fuse_dev_do_read()
1216 !fiq->connected || request_pending(fiq)); in fuse_dev_do_read()
1221 if (!fiq->connected) { in fuse_dev_do_read()
1226 if (!list_empty(&fiq->interrupts)) { in fuse_dev_do_read()
1227 req = list_entry(fiq->interrupts.next, struct fuse_req, in fuse_dev_do_read()
1229 return fuse_read_interrupt(fiq, cs, nbytes, req); in fuse_dev_do_read()
1232 if (forget_pending(fiq)) { in fuse_dev_do_read()
1233 if (list_empty(&fiq->pending) || fiq->forget_batch-- > 0) in fuse_dev_do_read()
1234 return fuse_read_forget(fc, fiq, cs, nbytes); in fuse_dev_do_read()
1236 if (fiq->forget_batch <= -8) in fuse_dev_do_read()
1237 fiq->forget_batch = 16; in fuse_dev_do_read()
1240 req = list_entry(fiq->pending.next, struct fuse_req, list); in fuse_dev_do_read()
1243 spin_unlock(&fiq->lock); in fuse_dev_do_read()
1288 queue_interrupt(fiq, req); in fuse_dev_do_read()
1301 spin_unlock(&fiq->lock); in fuse_dev_do_read()
2023 struct fuse_iqueue *fiq; in fuse_dev_poll() local
2029 fiq = &fud->fc->iq; in fuse_dev_poll()
2030 poll_wait(file, &fiq->waitq, wait); in fuse_dev_poll()
2032 spin_lock(&fiq->lock); in fuse_dev_poll()
2033 if (!fiq->connected) in fuse_dev_poll()
2035 else if (request_pending(fiq)) in fuse_dev_poll()
2037 spin_unlock(&fiq->lock); in fuse_dev_poll()
2090 struct fuse_iqueue *fiq = &fc->iq; in fuse_abort_conn() local
2132 spin_lock(&fiq->lock); in fuse_abort_conn()
2133 fiq->connected = 0; in fuse_abort_conn()
2134 list_for_each_entry(req, &fiq->pending, list) in fuse_abort_conn()
2136 list_splice_tail_init(&fiq->pending, &to_end); in fuse_abort_conn()
2137 while (forget_pending(fiq)) in fuse_abort_conn()
2138 kfree(fuse_dequeue_forget(fiq, 1, NULL)); in fuse_abort_conn()
2139 wake_up_all(&fiq->waitq); in fuse_abort_conn()
2140 spin_unlock(&fiq->lock); in fuse_abort_conn()
2141 kill_fasync(&fiq->fasync, SIGIO, POLL_IN); in fuse_abort_conn()