Browse code

fmap: save offset for warning message instead of recalculating

David Raynor authored on 2013/11/23 01:46:51
Showing 1 changed files
... ...
@@ -347,7 +347,7 @@ static void fmap_aging(fmap_t *m) {
347 347
 
348 348
 static int fmap_readpage(fmap_t *m, unsigned int first_page, unsigned int count, unsigned int lock_count) {
349 349
     size_t readsz = 0, eintr_off;
350
-    char *pptr = NULL, err[256];
350
+    char *pptr = NULL, errtxt[256];
351 351
     uint32_t s;
352 352
     unsigned int i, page = first_page, force_read = 0;
353 353
 
... ...
@@ -404,9 +404,9 @@ static int fmap_readpage(fmap_t *m, unsigned int first_page, unsigned int count,
404 404
 		    if(fmap_bitmap[j] & FM_MASK_SEEN) {
405 405
 			/* page we've seen before: check mtime */
406 406
 			STATBUF st;
407
-			char err[256];
408 407
 			if(FSTAT(_fd, &st)) {
409
-			    cli_warnmsg("fmap_readpage: fstat failed: %s\n", cli_strerror(errno, err, sizeof(err)));
408
+			    cli_strerror(errno, errtxt, sizeof(errtxt));
409
+			    cli_warnmsg("fmap_readpage: fstat failed: %s\n", &errtxt);
410 410
 			    return 1;
411 411
 			}
412 412
 			if(m->mtime != st.st_mtime) {
... ...
@@ -421,7 +421,8 @@ static int fmap_readpage(fmap_t *m, unsigned int first_page, unsigned int count,
421 421
 	    eintr_off = 0;
422 422
 	    while(readsz) {
423 423
 		ssize_t got;
424
-		got=m->pread_cb(m->handle, pptr, readsz, eintr_off + m->offset + first_page * m->pgsz);
424
+		off_t target_offset = eintr_off + m->offset + (first_page * m->pgsz);
425
+		got=m->pread_cb(m->handle, pptr, readsz, target_offset);
425 426
 
426 427
 		if(got < 0 && errno == EINTR)
427 428
 		    continue;
... ...
@@ -433,10 +434,13 @@ static int fmap_readpage(fmap_t *m, unsigned int first_page, unsigned int count,
433 433
 		    continue;
434 434
 		}
435 435
 
436
-		if(got <0)
437
-		    cli_errmsg("fmap_readpage: pread error: %s\n", cli_strerror(errno, err, sizeof(err)));
438
-		else
439
-		    cli_warnmsg("fmap_readpage: pread fail: asked for %lu bytes @ offset %lu, got %lu\n", (long unsigned int)readsz, (long unsigned int)(eintr_off + m->offset + first_page * m->pgsz), (long unsigned int)got);
436
+		if(got < 0) {
437
+		    cli_strerror(errno, errtxt, sizeof(errtxt));
438
+		    cli_errmsg("fmap_readpage: pread error: %s\n", &errtxt);
439
+		}
440
+		else {
441
+		    cli_warnmsg("fmap_readpage: pread fail: asked for %lu bytes @ offset %lu, got %lu\n", (long unsigned int)readsz, (long unsigned int)target_offset, (long unsigned int)got);
442
+		}
440 443
 		return 1;
441 444
 	    }
442 445