qemu-io: Rework alloc command
The alloc command in qemu-io is mostly useless currently. Instead of doing a single call to bdrv_is_allocated, we must call bdrv_is_allocated in a loop until we have found out for each requested sector if it is allocated or not (bdrv_is_allocated returns a number of sectors that are known to be in the same state as the first one, but it is not required to include all of them) This changes the output format of the alloc command so that a change to the expected output of qemu-iotests 019 is necessary once this is included. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									d032044fb9
								
							
						
					
					
						commit
						a7824a886e
					
				
							
								
								
									
										20
									
								
								qemu-io.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								qemu-io.c
									
									
									
									
									
								
							@ -1170,11 +1170,10 @@ static int
 | 
				
			|||||||
alloc_f(int argc, char **argv)
 | 
					alloc_f(int argc, char **argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int64_t offset;
 | 
						int64_t offset;
 | 
				
			||||||
	int nb_sectors;
 | 
						int nb_sectors, remaining;
 | 
				
			||||||
	char s1[64];
 | 
						char s1[64];
 | 
				
			||||||
	int num;
 | 
						int num, sum_alloc;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
	const char *retstr;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	offset = cvtnum(argv[1]);
 | 
						offset = cvtnum(argv[1]);
 | 
				
			||||||
	if (offset & 0x1ff) {
 | 
						if (offset & 0x1ff) {
 | 
				
			||||||
@ -1188,16 +1187,23 @@ alloc_f(int argc, char **argv)
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
		nb_sectors = 1;
 | 
							nb_sectors = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						remaining = nb_sectors;
 | 
				
			||||||
 | 
						sum_alloc = 0;
 | 
				
			||||||
 | 
						while (remaining) {
 | 
				
			||||||
		ret = bdrv_is_allocated(bs, offset >> 9, nb_sectors, &num);
 | 
							ret = bdrv_is_allocated(bs, offset >> 9, nb_sectors, &num);
 | 
				
			||||||
 | 
							remaining -= num;
 | 
				
			||||||
 | 
							if (ret) {
 | 
				
			||||||
 | 
								sum_alloc += num;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cvtstr(offset, s1, sizeof(s1));
 | 
						cvtstr(offset, s1, sizeof(s1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	retstr = ret ? "allocated" : "not allocated";
 | 
					 | 
				
			||||||
	if (nb_sectors == 1)
 | 
						if (nb_sectors == 1)
 | 
				
			||||||
		printf("sector %s at offset %s\n", retstr, s1);
 | 
							printf("sector allocated at offset %s\n", s1);
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		printf("%d/%d sectors %s at offset %s\n",
 | 
							printf("%d/%d sectors allocated at offset %s\n",
 | 
				
			||||||
			num, nb_sectors, retstr, s1);
 | 
								sum_alloc, nb_sectors, s1);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user