aboutsummaryrefslogtreecommitdiffstats
path: root/fs/coda/upcall.c
diff options
context:
space:
mode:
authorJan Harkes <jaharkes@cs.cmu.edu>2007-07-19 04:48:45 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-19 13:04:48 -0400
commit87065519633af79e0577e32a58dcd9cf3c45a8a0 (patch)
tree5c53c073d91523081271b1a83a741e32edf28cf7 /fs/coda/upcall.c
parented31a7dd636b296746c131b7386023aa1ef84309 (diff)
coda: cleanup /dev/cfs open and close handling
- Make sure device index is not a negative number. - Unlink queued requests when the device is closed to avoid passing them to the next opener. Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/coda/upcall.c')
-rw-r--r--fs/coda/upcall.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c
index 1651b918219a..a44ca4155fd5 100644
--- a/fs/coda/upcall.c
+++ b/fs/coda/upcall.c
@@ -641,8 +641,7 @@ int venus_statfs(struct dentry *dentry, struct kstatfs *sfs)
641 * 641 *
642 */ 642 */
643 643
644static inline void coda_waitfor_upcall(struct upc_req *vmp, 644static inline void coda_waitfor_upcall(struct upc_req *vmp)
645 struct venus_comm *vcommp)
646{ 645{
647 DECLARE_WAITQUEUE(wait, current); 646 DECLARE_WAITQUEUE(wait, current);
648 647
@@ -655,10 +654,6 @@ static inline void coda_waitfor_upcall(struct upc_req *vmp,
655 else 654 else
656 set_current_state(TASK_UNINTERRUPTIBLE); 655 set_current_state(TASK_UNINTERRUPTIBLE);
657 656
658 /* venus died */
659 if ( !vcommp->vc_inuse )
660 break;
661
662 /* got a reply */ 657 /* got a reply */
663 if ( vmp->uc_flags & ( REQ_WRITE | REQ_ABORT ) ) 658 if ( vmp->uc_flags & ( REQ_WRITE | REQ_ABORT ) )
664 break; 659 break;
@@ -738,7 +733,7 @@ static int coda_upcall(struct coda_sb_info *sbi,
738 * ENODEV. */ 733 * ENODEV. */
739 734
740 /* Go to sleep. Wake up on signals only after the timeout. */ 735 /* Go to sleep. Wake up on signals only after the timeout. */
741 coda_waitfor_upcall(req, vcommp); 736 coda_waitfor_upcall(req);
742 737
743 if (vcommp->vc_inuse) { /* i.e. Venus is still alive */ 738 if (vcommp->vc_inuse) { /* i.e. Venus is still alive */
744 /* Op went through, interrupt or not... */ 739 /* Op went through, interrupt or not... */