[SSI] openssi/kernel/cluster/ssi/util rmtfb.c,1.36,1.37
Roger Tsang <[email protected]> Tue, 25 Jan 2011 06:09:59 +0000
| Newsgroups | gmane.linux.cluster.ssic.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv25563/cluster/ssi/util
Modified Files:
Tag: OPENSSI-FC
rmtfb.c
Log Message:
- __rmtfb_getcli_id: add comment before function.
- __rmtfb_getcli_id: use newly defined states for rfb_state field in rmtfb_cli structure.
- rmtfb_newcli: use newly defined states for rfb_state field in rmtfb_cli structure.
Index: rmtfb.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/util/rmtfb.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- rmtfb.c 25 Jan 2011 05:52:26 -0000 1.36
+++ rmtfb.c 25 Jan 2011 06:09:57 -0000 1.37
@@ -964,6 +964,18 @@
}
#ifdef RMTFB_HASH_LOCKLESS
+/**
+ * __rmtfb_getcli_id - lookup rmtfb_cli structure
+ * @id - rfb_id to lookup.
+ * @sem - (optional) semaphore held by caller to be released by us upon
+ * successful lookup and prior waiting for rmtfb_setcli_re/open().
+ *
+ * On success returns with reference held on rmtfb_cli structure and on
+ * file structure in rfb_file field in rmtfb_cli structure. Otherwise
+ * returns NULL or error pointer.
+ *
+ * NOTE! Semaphore (@sem) is released when return value is non-NULL.
+ */
static struct rmtfb_cli *
__rmtfb_getcli_id(unsigned long id, struct semaphore *sem)
{
@@ -984,20 +996,19 @@
rmtfb_putcli(rfb);
return NULL;
}
- /* Got a valid rmtfb_cli structure */
+ /*
+ * Wait for rmtfb_setcli_re/open()
+ */
if (sem)
up(sem);
-
if (!atomic_read(&rfb->rfb_state)) {
curtask = current;
ssi_block_signals(curtask, &oldmask);
- /* Wait for rmtfb_setcli_re/open() */
wait_event_interruptible(rfb->rfb_wait,
atomic_read(&rfb->rfb_state));
ssi_unblock_signals(curtask, &oldmask);
}
- if (unlikely(atomic_read(&rfb->rfb_state) == 2)) {
- /* rmtfb_setcli_re/open() failed */
+ if (unlikely(atomic_read(&rfb->rfb_state) == RFB_FAIL)) {
fput(rfb->common.rfb_file);
rmtfb_putcli(rfb);
return ERR_PTR(-EREMOTE);
@@ -1488,7 +1499,7 @@
error = rmtfb_setcli_open(rfb);
if (unlikely(error)) {
SSI_ASSERT(error != -EINVAL);
- atomic_set(&rfb->rfb_state, 2); /* stale */
+ atomic_set(&rfb->rfb_state, RFB_FAIL);
wake_up(&rfb->rfb_wait);
rmtfb_putcli(rfb);
goto out_bad;
@@ -1501,7 +1512,7 @@
file->private_data = rfb;
rmtfb_get(rfb);
- atomic_set(&rfb->rfb_state, 1); /* ready */
+ atomic_set(&rfb->rfb_state, RFB_READY);
wake_up(&rfb->rfb_wait);
out:
#ifdef RFBDEBUG
------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires
February 28th, so secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsight-sfd2d