summaryrefslogtreecommitdiffstats
path: root/src/server/integrity.c
diff options
context:
space:
mode:
authorSimon Rettberg2015-01-30 16:14:59 +0100
committerSimon Rettberg2015-01-30 16:14:59 +0100
commitfaeb780fb33f79092f27b92dc5bbc13a8e7d6cbd (patch)
tree927f871d105693a34dd62fa366801ca68a1e0daf /src/server/integrity.c
parent[SERVER] Implement proper keep alive for uplinks (diff)
downloaddnbd3-faeb780fb33f79092f27b92dc5bbc13a8e7d6cbd.tar.gz
dnbd3-faeb780fb33f79092f27b92dc5bbc13a8e7d6cbd.tar.xz
dnbd3-faeb780fb33f79092f27b92dc5bbc13a8e7d6cbd.zip
[SERVER] Use shared file handle for reading
Diffstat (limited to 'src/server/integrity.c')
-rw-r--r--src/server/integrity.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/server/integrity.c b/src/server/integrity.c
index 547f8d3..efc54c5 100644
--- a/src/server/integrity.c
+++ b/src/server/integrity.c
@@ -121,9 +121,9 @@ static void* integrity_main(void * data UNUSED)
if ( checkQueue[i].image == NULL ) continue;
dnbd3_image_t * const image = image_lock( checkQueue[i].image );
checkQueue[i].image = NULL;
+ if ( i + 1 == queueLen ) queueLen--;
if ( image == NULL ) continue;
// We have the image. Call image_release() some time
- if ( i + 1 == queueLen ) queueLen--;
spin_lock( &image->lock );
if ( image->crc32 != NULL && image->filesize != 0 ) {
int const blocks[2] = { checkQueue[i].block, -1 };
@@ -137,15 +137,11 @@ static void* integrity_main(void * data UNUSED)
}
memcpy( buffer, image->crc32, required );
spin_unlock( &image->lock );
- int fd = open( image->path, O_RDONLY );
- if ( fd >= 0 ) {
- if ( image_checkBlocksCrc32( fd, (uint32_t*)buffer, blocks, fileSize ) ) {
- //printf( "[DEBUG] CRC check of block %d for %s succeeded :-)\n", blocks[0], image->lower_name );
- } else {
- memlogf( "[WARNING] Hash check for block %d of %s failed!", blocks[0], image->lower_name );
- image_updateCachemap( image, blocks[0] * HASH_BLOCK_SIZE, (blocks[0] + 1) * HASH_BLOCK_SIZE, false );
- }
- close( fd );
+ if ( image_checkBlocksCrc32( image->readFd, (uint32_t*)buffer, blocks, fileSize ) ) {
+ //printf( "[DEBUG] CRC check of block %d for %s succeeded :-)\n", blocks[0], image->lower_name );
+ } else {
+ memlogf( "[WARNING] Hash check for block %d of %s failed!", blocks[0], image->lower_name );
+ image_updateCachemap( image, blocks[0] * HASH_BLOCK_SIZE, (blocks[0] + 1) * HASH_BLOCK_SIZE, false );
}
pthread_mutex_lock( &integrityQueueLock );
} else {