Add the test we used in lecture to creash the IDE system when the
locks were moved around.
This commit is contained in:
		
							parent
							
								
									d6cd7d0804
								
							
						
					
					
						commit
						f4c12f116d
					
				
					 2 changed files with 39 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -107,6 +107,7 @@ UPROGS=\ | |||
| 	_mkdir\
 | ||||
| 	_rm\
 | ||||
| 	_sh\
 | ||||
| 	_stressfs\
 | ||||
| 	_usertests\
 | ||||
| 	_wc\
 | ||||
| 	_zombie\
 | ||||
|  |  | |||
							
								
								
									
										38
									
								
								stressfs.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								stressfs.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| // Demonstrate that moving the "acquire" in iderw after the loop that
 | ||||
| // appends to the idequeue results in a race.
 | ||||
| 
 | ||||
| // For this to work, you should also add a spin within iderw's
 | ||||
| // idequeue traversal loop.  Spinning 40000 times demonstrated the bug
 | ||||
| // after about 5 runs of stressfs in QEMU on a 2.1GHz CPU.
 | ||||
| 
 | ||||
| #include "types.h" | ||||
| #include "stat.h" | ||||
| #include "user.h" | ||||
| #include "fs.h" | ||||
| #include "fcntl.h" | ||||
| 
 | ||||
| int | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
|   int i; | ||||
|   printf(1, "stressfs starting\n"); | ||||
| 
 | ||||
|   for (i = 0; i < 4; i++) { | ||||
|     if (fork() > 0) { | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   printf(1, "%d\n", i); | ||||
| 
 | ||||
|   char path[] = "stressfs0"; | ||||
|   path[8] += i; | ||||
|   int fd = open(path, O_CREATE | O_RDWR); | ||||
|   for (i = 0; i < 100; i++) | ||||
|     printf(fd, "%d\n", i); | ||||
|   close(fd); | ||||
| 
 | ||||
|   wait(); | ||||
|    | ||||
|   exit(); | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Austin Clements
						Austin Clements