From mboxrd@z Thu Jan 1 00:00:00 1970 From: jbrassow@sourceware.org Date: 21 Feb 2007 17:14:45 -0000 Subject: [Cluster-devel] cluster/cmirror-kernel/src dm-cmirror-common.h ... Message-ID: <20070221171445.29598.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL4 Changes by: jbrassow at sourceware.org 2007-02-21 17:14:44 Modified files: cmirror-kernel/src: dm-cmirror-common.h dm-cmirror-server.c Log message: A previous fix that caused cluster mirrors to reattempt recovery to resolve intermittent drive failure, now causes indefinite retries during permenent drive failure. This can slow down the machine dramatically, especially if there are several mirrors active on the system that utilize the same failed drive. We now attempt one extra pass. Further extra passes will require a reload of the mirror (as before). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-cmirror-common.h.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.11&r2=1.1.2.12 http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror-kernel/src/dm-cmirror-server.c.diff?cvsroot=cluster&only_with_tag=RHEL4&r1=1.1.2.23&r2=1.1.2.24 --- cluster/cmirror-kernel/src/Attic/dm-cmirror-common.h 2007/02/14 17:44:07 1.1.2.11 +++ cluster/cmirror-kernel/src/Attic/dm-cmirror-common.h 2007/02/21 17:14:44 1.1.2.12 @@ -99,6 +99,7 @@ uint32_t *sync_bits; uint32_t *recovering_bits; /* FIXME: this seems excessive */ + int sync_pass; /* number of passes attempting to resync */ int sync_search; /* Resync flag */ --- cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c 2007/02/20 19:35:10 1.1.2.23 +++ cluster/cmirror-kernel/src/Attic/dm-cmirror-server.c 2007/02/21 17:14:44 1.1.2.24 @@ -229,8 +229,9 @@ * FIXME: pvmove is not supported yet, but when it is, * an audit of sync_count changes will need to be made */ - if (lc->sync_count < lc->region_count) { + if ((lc->sync_count < lc->region_count) && !lc->sync_pass) { lc->sync_search = 0; + lc->sync_pass++; } else { return 0; } @@ -1029,7 +1030,6 @@ return 0; } - static int cluster_log_serverd(void *data){ int error; struct log_c *lc;