qemu-nbd: open the block device after starting the client thread
This is cleaner, because we do not need to close the block device when there is an error opening /dev/nbdX. It was done this way only to print errors before daemonizing. At the same time, use atexit to ensure that the block device is closed whenever we exit. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
		
							parent
							
								
									f1ef5555c2
								
							
						
					
					
						commit
						802ddc375a
					
				
							
								
								
									
										34
									
								
								qemu-nbd.c
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								qemu-nbd.c
									
									
									
									
									
								
							| @ -460,22 +460,6 @@ int main(int argc, char **argv) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     bdrv_init(); | ||||
| 
 | ||||
|     bs = bdrv_new("hda"); | ||||
| 
 | ||||
|     srcpath = argv[optind]; | ||||
|     if ((ret = bdrv_open(bs, srcpath, flags, NULL)) < 0) { | ||||
|         errno = -ret; | ||||
|         err(EXIT_FAILURE, "Failed to bdrv_open '%s'", srcpath); | ||||
|     } | ||||
| 
 | ||||
|     fd_size = bs->total_sectors * 512; | ||||
| 
 | ||||
|     if (partition != -1 && | ||||
|         find_partition(bs, partition, &dev_offset, &fd_size)) | ||||
|         err(EXIT_FAILURE, "Could not find partition %d", partition); | ||||
| 
 | ||||
|     if (device) { | ||||
|         /* Open before spawning new threads.  In the future, we may
 | ||||
|          * drop privileges after opening. | ||||
| @ -491,6 +475,23 @@ int main(int argc, char **argv) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     bdrv_init(); | ||||
|     atexit(bdrv_close_all); | ||||
| 
 | ||||
|     bs = bdrv_new("hda"); | ||||
|     srcpath = argv[optind]; | ||||
|     if ((ret = bdrv_open(bs, srcpath, flags, NULL)) < 0) { | ||||
|         errno = -ret; | ||||
|         err(EXIT_FAILURE, "Failed to bdrv_open '%s'", argv[optind]); | ||||
|     } | ||||
| 
 | ||||
|     fd_size = bs->total_sectors * 512; | ||||
| 
 | ||||
|     if (partition != -1 && | ||||
|         find_partition(bs, partition, &dev_offset, &fd_size)) { | ||||
|         err(EXIT_FAILURE, "Could not find partition %d", partition); | ||||
|     } | ||||
| 
 | ||||
|     sharing_fds = g_malloc((shared + 1) * sizeof(int)); | ||||
| 
 | ||||
|     if (sockpath) { | ||||
| @ -568,7 +569,6 @@ int main(int argc, char **argv) | ||||
|     qemu_vfree(data); | ||||
| 
 | ||||
|     close(sharing_fds[0]); | ||||
|     bdrv_close(bs); | ||||
|     g_free(sharing_fds); | ||||
|     if (sockpath) { | ||||
|         unlink(sockpath); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paolo Bonzini
						Paolo Bonzini