"Waiting for busy volume" == "Network is down." ?
Love
lha at stacken.kth.se
Thu Mar 11 01:28:35 CET 1999
Love <lha at stacken.kth.se> writes:
> "Neulinger, Nathan R." <nneul at umr.edu> writes:
>
> > The message returned is a little odd... It should be waiting for busy
> > volume, but it prints network is down instead. This is on linux 2.2.x.
>
> It tries next availble fsserver se try_next_fs() in arlad/fcache.c.
> Guess it should sleep a a while and then do the loop again when it runs out
> of fileservers.
>
> Love, whom is trying to fetch the subway home.
Since i missed the last train you'll get a patch too :(
Have not tried to compile it, I don't think this a a good solution but it
will probably work.
Love, now waiting for night-busses.
Index: arlad/fcache.h
===================================================================
RCS file: /usr/local/cvsroot/arla/arlad/fcache.h,v
retrieving revision 1.48
diff -u -w -u -w -r1.48 arlad/fcache.h
--- arlad/fcache.h 1999/01/10 20:25:57 1.48
+++ arlad/fcache.h 1999/03/11 00:24:52
@@ -319,7 +319,7 @@
fs_server_context *context);
ConnCacheEntry *
-find_next_fs (fs_server_context *context, ConnCacheEntry *prev_conn);
+find_next_fs (fs_server_context *context, ConnCacheEntry *prev_conn, int error);
void
free_fs_server_context (fs_server_context *context);
Index: arlad/fcache.c
===================================================================
RCS file: /usr/local/cvsroot/arla/arlad/fcache.c,v
retrieving revision 1.182
diff -u -w -u -w -r1.182 arla/dfcache.c
--- arlad/fcache.c 1999/03/02 08:50:06 1.182
+++ arlad/fcache.c 1999/03/11 00:22:22
@@ -893,22 +893,32 @@
return FALSE;
}
+static Bool
+retry_next_fs (int error); /* XXX */
+
+
/*
* Find the next fileserver for the request in `context'.
* Returns a ConnCacheEntry or NULL.
*/
-ConnCacheEntry *
-find_next_fs (fs_server_context *context, ConnCacheEntry *prev_conn)
+static ConnCacheEntry *
+find_next_fs (fs_server_context *context, ConnCacheEntry *prev_conn,
+ int error)
{
if (prev_conn != NULL)
conn_dead (prev_conn);
if (context->i < context->num_conns)
return context->conns[context->i++];
- else
+ else {
+ if (retry_next_fs (error)) {
+ context->i = 0;
+ return context->conns[context->i++];
+ } else
return NULL;
}
+}
/*
* Clean up a `fs_server_context'
@@ -983,7 +993,7 @@
context->num_conns = num_clones;
context->i = 0;
- return find_next_fs (context, NULL);
+ return find_next_fs (context, NULL, ARLA_VNOVOL);
}
/*
@@ -1432,6 +1442,24 @@
}
}
+static Bool
+retry_next_fs (int error)
+{
+ switch (error) {
+ case ARLA_VSALVAGE :
+ case ARLA_VBUSY :
+ return TRUE;
+ case ARLA_VNOVOL :
+ case ARLA_VNOSERVICE :
+ case ARLA_VOFFLINE :
+ case ARLA_VMOVED :
+ case ARLA_VIO :
+ case RX_CALL_DEAD :
+ case 0 :
+ return FALSE;
+ default :
+ return FALSE;
+ }
/*
* Fetch the attributes for the file in `entry' from the file_server,
@@ -1454,7 +1482,7 @@
for (conn = find_first_fs (entry, ce, ret_context);
conn != NULL;
- conn = find_next_fs (ret_context, conn)) {
+ conn = find_next_fs (ret_context, conn, ret)) {
ret = RXAFS_FetchStatus (conn->connection,
&entry->fid.fid,
&status,
@@ -1680,7 +1708,7 @@
for (conn = find_first_fs (entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
call = rx_NewCall (conn->connection);
if (call == NULL) {
@@ -1791,7 +1819,7 @@
for (conn = find_first_fs (entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
call = rx_NewCall (conn->connection);
if (call == NULL) {
@@ -1934,7 +1962,7 @@
for (conn = find_first_fs (dir_entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
host = rx_HostOf (rx_PeerOf (conn->connection));
@@ -2062,7 +2090,7 @@
for (conn = find_first_fs (dir_entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
host = rx_HostOf(rx_PeerOf(conn->connection));
@@ -2151,7 +2179,7 @@
for (conn = find_first_fs (dir_entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
host = rx_HostOf(rx_PeerOf(conn->connection));
@@ -2227,7 +2255,7 @@
for (conn = find_first_fs (dir_entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
host = rx_HostOf(rx_PeerOf(conn->connection));
@@ -2282,7 +2310,7 @@
for (conn = find_first_fs (dir_entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
host = rx_HostOf(rx_PeerOf(conn->connection));
@@ -2334,7 +2362,7 @@
for (conn = find_first_fs (dir_entry, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
host = rx_HostOf(rx_PeerOf(conn->connection));
@@ -2389,7 +2417,7 @@
for (conn = find_first_fs (old_dir, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
host = rx_HostOf(rx_PeerOf(conn->connection));
@@ -2633,7 +2661,7 @@
for (conn = find_first_fs (e, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
ret = read_data (e, conn, ce);
if (!try_next_fs (ret))
break;
@@ -3024,7 +3052,7 @@
for (conn = find_first_fs (dire, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
ret = RXAFS_FetchACL (conn->connection, &fid.fid,
opaque, &status, &volsync);
if (!try_next_fs (ret))
@@ -3067,7 +3095,7 @@
for (conn = find_first_fs (dire, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
ret = RXAFS_StoreACL (conn->connection, &fid.fid,
opaque, &status, &volsync);
if (!try_next_fs (ret))
@@ -3110,7 +3144,7 @@
for (conn = find_first_fs (dire, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
ret = RXAFS_GetVolumeStatus (conn->connection, fid.fid.Volume,
volstat, volumename, offlinemsg,
motd);
@@ -3154,7 +3188,7 @@
for (conn = find_first_fs (dire, ce, &context);
conn != NULL;
- conn = find_next_fs (&context, conn)) {
+ conn = find_next_fs (&context, conn, ret)) {
ret = RXAFS_SetVolumeStatus (conn->connection, fid.fid.Volume,
volstat, volumename, offlinemsg,
motd);
More information about the Arla-drinkers
mailing list