diff options
author | Simon Rettberg | 2020-03-03 12:21:01 +0100 |
---|---|---|
committer | Simon Rettberg | 2020-03-03 12:21:01 +0100 |
commit | 26c1ad7af0f5749c5343a5823b9c8cece885ce84 (patch) | |
tree | 0fe45f629560edb47bd86c7dc78b69715348b600 /src/server/integrity.c | |
parent | [SERVER] altservers: Fix missing index mapping (replication) (diff) | |
download | dnbd3-26c1ad7af0f5749c5343a5823b9c8cece885ce84.tar.gz dnbd3-26c1ad7af0f5749c5343a5823b9c8cece885ce84.tar.xz dnbd3-26c1ad7af0f5749c5343a5823b9c8cece885ce84.zip |
[SERVER] Remove "working" flag, introduce fine-grained flags
Tracking the "working" state of images using one boolean is insufficient
regarding the different ways in which providing an image can fail.
Introduce separate flags for different conditions, like "file not
readable", "file not writable", "no uplink server available", "file
content has changed".
Diffstat (limited to 'src/server/integrity.c')
-rw-r--r-- | src/server/integrity.c | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/src/server/integrity.c b/src/server/integrity.c index 4006dfc..91e53b8 100644 --- a/src/server/integrity.c +++ b/src/server/integrity.c @@ -195,9 +195,10 @@ static void* integrity_main(void * data UNUSED) readFd = directFd; } } - if ( readFd == -1 ) { // Try buffered; flush to disk for that - image_ensureOpen( image ); - readFd = image->readFd; + if ( readFd == -1 ) { // Try buffered as fallback + if ( image_ensureOpen( image ) && !image->problem.read ) { + readFd = image->readFd; + } } if ( readFd == -1 ) { logadd( LOG_MINOR, "Couldn't get any valid fd for integrity check of %s... ignoring...", image->path ); @@ -237,16 +238,6 @@ static void* integrity_main(void * data UNUSED) // Done with this task as nothing left checkQueue[i].image = NULL; if ( i + 1 == queueLen ) queueLen--; - // Mark as working again if applicable - if ( !foundCorrupted ) { - dnbd3_uplink_t *uplink = ref_get_uplink( &image->uplinkref ); - if ( uplink != NULL ) { // TODO: image_determineWorkingState() helper? - mutex_lock( &image->lock ); - image->working = uplink->current.fd != -1 && image->readFd != -1; - mutex_unlock( &image->lock ); - ref_put( &uplink->reference ); - } - } } else { // Still more blocks to go... checkQueue[i].block = blocks[0]; @@ -254,9 +245,6 @@ static void* integrity_main(void * data UNUSED) } if ( foundCorrupted && !_shutdown ) { // Something was fishy, make sure uplink exists - mutex_lock( &image->lock ); - image->working = false; - mutex_unlock( &image->lock ); uplink_init( image, -1, NULL, -1 ); } // Release :-) |