plan 9 kernel history: overview | file list | diff list

1990/03081/port/devmnt.c (diff list | history)

1990/0306/sys/src/9/port/devmnt.c:553,5591990/03081/sys/src/9/port/devmnt.c:553,559 (short | long | prev | next)
1990/0227    
{ 
	ulong n; 
	Mntbuf *mbr, *mbw; 
	Chan *mntpt; 
1990/03081    
	Chan *mntpt, *msg; 
1990/0306    
	int isbit; 
1990/0227    
 
	mbr = mballoc(); 
1990/0306/sys/src/9/port/devmnt.c:564,5861990/03081/sys/src/9/port/devmnt.c:564,601
1990/0227    
		nexterror(); 
	} 
	n = convS2M(&mh->thdr, mbw->buf); 
	qlock(m); 
	if(m->msg == 0){ 
		qunlock(m); 
		error(0, Eshutdown); 
	} 
1990/0306    
	isbit = 0; 
	if(devchar[m->msg->type] == 'b') 
		isbit = 1; 
	if(!isbit) 
		qlock(m->msg); 
1990/03081    
	/* 
	 * Avoid qlock for bit, to maximize parallelism 
	 */ 
	if(isbit){ 
		lock(&m->use);		/* spin rather than sleep */ 
		if((msg = m->msg) == 0){ 
			unlock(&m->use); 
			error(0, Eshutdown); 
		} 
		incref(msg); 
		unlock(&m->use); 
	}else{ 
		qlock(m); 
		if((msg = m->msg) == 0){ 
			qunlock(m); 
			error(0, Eshutdown); 
		} 
		qlock(msg); 
	} 
1990/0227    
	if(waserror()){ 
		qunlock(m); 
1990/0306    
		if(!isbit) 
			qunlock(m->msg); 
1990/03081    
		if(isbit) 
			close(msg); 
		else{ 
			qunlock(m); 
			qunlock(msg); 
		} 
1990/0227    
		nexterror(); 
	} 
	if((*devtab[m->msg->type].write)(m->msg, mbw->buf, n) != n){ 
1990/03081    
	if((*devtab[msg->type].write)(msg, mbw->buf, n) != n){ 
1990/0227    
		pprint("short write in mntxmit\n"); 
		error(0, Egreg); 
	} 
1990/0306/sys/src/9/port/devmnt.c:588,5971990/03081/sys/src/9/port/devmnt.c:603,615
1990/0227    
	/* 
	 * Read response 
	 */ 
	n = (*devtab[m->msg->type].read)(m->msg, mbr->buf, BUFSIZE); 
	qunlock(m); 
1990/0306    
	if(!isbit) 
		qunlock(m->msg); 
1990/03081    
	n = (*devtab[msg->type].read)(msg, mbr->buf, BUFSIZE); 
	if(isbit) 
		close(msg); 
	else{ 
		qunlock(m); 
		qunlock(msg); 
	} 
1990/0227    
	poperror(); 
 
	if(convM2S(mbr->buf, &mh->rhdr, n) == 0){ 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)