big directory test
This commit is contained in:
		
							parent
							
								
									1be7668537
								
							
						
					
					
						commit
						bcfb84b6a9
					
				
					 3 changed files with 59 additions and 2 deletions
				
			
		
							
								
								
									
										9
									
								
								Notes
									
										
									
									
									
								
							
							
						
						
									
										9
									
								
								Notes
									
										
									
									
									
								
							| 
						 | 
					@ -115,6 +115,11 @@ why does shell often ignore first line of input?
 | 
				
			||||||
test: one process unlinks a file while another links to it
 | 
					test: one process unlinks a file while another links to it
 | 
				
			||||||
test: one process opens a file while another deletes it
 | 
					test: one process opens a file while another deletes it
 | 
				
			||||||
test: mkdir. deadlock d/.. vs ../d
 | 
					test: mkdir. deadlock d/.. vs ../d
 | 
				
			||||||
 | 
					test: sub-sub directories. mkdir("d1/d2")
 | 
				
			||||||
 | 
					test: dup() shared fd->off
 | 
				
			||||||
 | 
					test: indirect blocks. files and directories.
 | 
				
			||||||
 | 
					test: sbrk
 | 
				
			||||||
 | 
					test: does echo foo > x truncate x?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
make proc[0] runnable
 | 
					make proc[0] runnable
 | 
				
			||||||
cpu early tss and gdt
 | 
					cpu early tss and gdt
 | 
				
			||||||
| 
						 | 
					@ -139,3 +144,7 @@ sh: support pipes?  leave it for the class?
 | 
				
			||||||
sh: dynamic memory allocation?
 | 
					sh: dynamic memory allocation?
 | 
				
			||||||
sh: should sh support ; () &  --- need malloc
 | 
					sh: should sh support ; () &  --- need malloc
 | 
				
			||||||
sh: stop stdin on ctrl-d (for cat > y)
 | 
					sh: stop stdin on ctrl-d (for cat > y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					really should have bdwrite() for file content
 | 
				
			||||||
 | 
					  and make some inode updates async
 | 
				
			||||||
 | 
					  so soft updates make sense
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										5
									
								
								fs.c
									
										
									
									
									
								
							
							
						
						
									
										5
									
								
								fs.c
									
										
									
									
									
								
							| 
						 | 
					@ -262,8 +262,8 @@ iunlink(struct inode *ip)
 | 
				
			||||||
    if (ip->addrs[i] != 0) {
 | 
					    if (ip->addrs[i] != 0) {
 | 
				
			||||||
      if (i == INDIRECT) {
 | 
					      if (i == INDIRECT) {
 | 
				
			||||||
	inbp = bread(ip->dev, ip->addrs[INDIRECT]);
 | 
						inbp = bread(ip->dev, ip->addrs[INDIRECT]);
 | 
				
			||||||
	for (j = 0; j < NINDIRECT; j++) {
 | 
					 | 
				
			||||||
        uint *a = (uint *) inbp->data;
 | 
					        uint *a = (uint *) inbp->data;
 | 
				
			||||||
 | 
						for (j = 0; j < NINDIRECT; j++) {
 | 
				
			||||||
	  if (a[j] != 0) {
 | 
						  if (a[j] != 0) {
 | 
				
			||||||
	    bfree(ip->dev, a[j]);
 | 
						    bfree(ip->dev, a[j]);
 | 
				
			||||||
	    a[j] = 0;
 | 
						    a[j] = 0;
 | 
				
			||||||
| 
						 | 
					@ -589,6 +589,9 @@ unlink(char *cp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ip = iget(dev, inum);
 | 
					  ip = iget(dev, inum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if(ip->nlink < 1)
 | 
				
			||||||
 | 
					    panic("unlink nlink < 1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ip->nlink--;
 | 
					  ip->nlink--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  iupdate(ip);
 | 
					  iupdate(ip);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										45
									
								
								fstests.c
									
										
									
									
									
								
							
							
						
						
									
										45
									
								
								fstests.c
									
										
									
									
									
								
							| 
						 | 
					@ -365,11 +365,56 @@ concreate()
 | 
				
			||||||
  puts("concreate ok\n");
 | 
					  puts("concreate ok\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// directory that uses indirect blocks
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					bigdir()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int i, fd;
 | 
				
			||||||
 | 
					  char name[10];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  unlink("bd");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fd = open("bd", O_CREATE);
 | 
				
			||||||
 | 
					  if(fd < 0){
 | 
				
			||||||
 | 
					    puts("bigdir create failed\n");
 | 
				
			||||||
 | 
					    exit();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  close(fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for(i = 0; i < 500; i++){
 | 
				
			||||||
 | 
					    name[0] = 'x';
 | 
				
			||||||
 | 
					    name[1] = '0' + (i / 64);
 | 
				
			||||||
 | 
					    name[2] = '0' + (i % 64);
 | 
				
			||||||
 | 
					    name[3] = '\0';
 | 
				
			||||||
 | 
					    if(link("bd", name) != 0){
 | 
				
			||||||
 | 
					      puts("bigdir link failed\n");
 | 
				
			||||||
 | 
					      exit();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    puts("c");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  unlink("bd");
 | 
				
			||||||
 | 
					  for(i = 0; i < 500; i++){
 | 
				
			||||||
 | 
					    name[0] = 'x';
 | 
				
			||||||
 | 
					    name[1] = '0' + (i / 64);
 | 
				
			||||||
 | 
					    name[2] = '0' + (i % 64);
 | 
				
			||||||
 | 
					    name[3] = '\0';
 | 
				
			||||||
 | 
					    if(unlink(name) != 0){
 | 
				
			||||||
 | 
					      puts("bigdir unlink failed");
 | 
				
			||||||
 | 
					      exit();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    puts("d");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  puts("bigdir ok\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
main(int argc, char *argv[])
 | 
					main(int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  puts("fstests starting\n");
 | 
					  puts("fstests starting\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bigdir();
 | 
				
			||||||
  concreate();
 | 
					  concreate();
 | 
				
			||||||
  linktest();
 | 
					  linktest();
 | 
				
			||||||
  unlinkread();
 | 
					  unlinkread();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue