Changes in uspace/lib/block/libblock.c [96b02eb9:5716e9a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/block/libblock.c
r96b02eb9 r5716e9a 44 44 #include <sys/mman.h> 45 45 #include <async.h> 46 #include <ipc/ipc.h>47 46 #include <as.h> 48 47 #include <assert.h> … … 177 176 if (rc != EOK) { 178 177 munmap(comm_area, comm_size); 179 ipc_hangup(dev_phone);178 async_hangup(dev_phone); 180 179 return rc; 181 180 } … … 183 182 if (get_block_size(dev_phone, &bsize) != EOK) { 184 183 munmap(comm_area, comm_size); 185 ipc_hangup(dev_phone);184 async_hangup(dev_phone); 186 185 return rc; 187 186 } … … 190 189 if (rc != EOK) { 191 190 munmap(comm_area, comm_size); 192 ipc_hangup(dev_phone);191 async_hangup(dev_phone); 193 192 return rc; 194 193 } … … 211 210 212 211 munmap(devcon->comm_area, devcon->comm_size); 213 ipc_hangup(devcon->dev_phone);212 async_hangup(devcon->dev_phone); 214 213 215 214 free(devcon); … … 295 294 296 295 /* Allow 1:1 or small-to-large block size translation */ 297 if (cache->lblock_size % devcon->pblock_size != 0) 296 if (cache->lblock_size % devcon->pblock_size != 0) { 297 free(cache); 298 298 return ENOTSUP; 299 } 299 300 300 301 cache->blocks_cluster = cache->lblock_size / devcon->pblock_size; … … 410 411 l = hash_table_find(&cache->block_hash, &key); 411 412 if (l) { 413 found: 412 414 /* 413 415 * We found the block in the cache. … … 437 439 if (!b->data) { 438 440 free(b); 441 b = NULL; 439 442 goto recycle; 440 443 } … … 492 495 goto retry; 493 496 } 497 l = hash_table_find(&cache->block_hash, &key); 498 if (l) { 499 /* 500 * Someone else must have already 501 * instantiated the block while we were 502 * not holding the cache lock. 503 * Leave the recycled block on the 504 * freelist and continue as if we 505 * found the block of interest during 506 * the first try. 507 */ 508 fibril_mutex_unlock(&b->lock); 509 goto found; 510 } 494 511 495 512 } … … 564 581 assert(devcon); 565 582 assert(devcon->cache); 583 assert(block->refcnt >= 1); 566 584 567 585 cache = devcon->cache; … … 623 641 unsigned long key = block->lba; 624 642 hash_table_remove(&cache->block_hash, &key, 1); 643 fibril_mutex_unlock(&block->lock); 644 free(block->data); 625 645 free(block); 626 free(block->data);627 646 cache->blocks_cached--; 628 647 fibril_mutex_unlock(&cache->lock);
Note:
See TracChangeset
for help on using the changeset viewer.