Make pin/unpin explicit
This commit is contained in:
		
							parent
							
								
									f1bb53c690
								
							
						
					
					
						commit
						f37a3e3964
					
				
					 3 changed files with 20 additions and 2 deletions
				
			
		
							
								
								
									
										16
									
								
								kernel/bio.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								kernel/bio.c
									
										
									
									
									
								
							|  | @ -133,3 +133,19 @@ brelse(struct buf *b) | |||
|    | ||||
|   release(&bcache.lock); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| bpin(struct buf *b) { | ||||
|   acquire(&bcache.lock); | ||||
|   b->refcnt++; | ||||
|   release(&bcache.lock); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| bunpin(struct buf *b) { | ||||
|   acquire(&bcache.lock); | ||||
|   b->refcnt--; | ||||
|   release(&bcache.lock); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,6 +14,8 @@ void            binit(void); | |||
| struct buf*     bread(uint, uint); | ||||
| void            brelse(struct buf*); | ||||
| void            bwrite(struct buf*); | ||||
| void            bpin(struct buf*); | ||||
| void            bunpin(struct buf*); | ||||
| 
 | ||||
| // console.c
 | ||||
| void            consoleinit(void); | ||||
|  |  | |||
|  | @ -77,7 +77,7 @@ install_trans(void) | |||
|     struct buf *dbuf = bread(log.dev, log.lh.block[tail]); // read dst
 | ||||
|     memmove(dbuf->data, lbuf->data, BSIZE);  // copy block to dst
 | ||||
|     bwrite(dbuf);  // write dst to disk
 | ||||
|     dbuf->refcnt--;  // unpin buffer from cache
 | ||||
|     bunpin(dbuf); | ||||
|     brelse(lbuf); | ||||
|     brelse(dbuf); | ||||
|   } | ||||
|  | @ -229,7 +229,7 @@ log_write(struct buf *b) | |||
|   } | ||||
|   log.lh.block[i] = b->blockno; | ||||
|   if (i == log.lh.n) {  // Add new block to log?
 | ||||
|     b->refcnt++;  // Pin block in cache
 | ||||
|     bpin(b); | ||||
|     log.lh.n++; | ||||
|   } | ||||
|   release(&log.lock); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Frans Kaashoek
						Frans Kaashoek