nbd: Simplify qemu bitmap context name
Each dirty bitmap already knows its name; by reducing the scope of the places where we construct "qemu:dirty-bitmap:NAME" strings, tracking the name is more localized, and there are fewer per-export fields to worry about. This in turn will make it easier for an upcoming patch to export more than one bitmap at once. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20201027050556.269064-6-eblake@redhat.com>
This commit is contained in:
		
							parent
							
								
									cbad81cef8
								
							
						
					
					
						commit
						02e87e3b1c
					
				
							
								
								
									
										19
									
								
								nbd/server.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								nbd/server.c
									
									
									
									
									
								
							| @ -95,7 +95,6 @@ struct NBDExport { | ||||
|     Notifier eject_notifier; | ||||
| 
 | ||||
|     BdrvDirtyBitmap *export_bitmap; | ||||
|     char *export_bitmap_context; | ||||
| }; | ||||
| 
 | ||||
| static QTAILQ_HEAD(, NBDExport) exports = QTAILQ_HEAD_INITIALIZER(exports); | ||||
| @ -871,14 +870,15 @@ static bool nbd_meta_qemu_query(NBDClient *client, NBDExportMetaContexts *meta, | ||||
|     } | ||||
| 
 | ||||
|     if (nbd_strshift(&query, "dirty-bitmap:")) { | ||||
|         const char *bm_name; | ||||
| 
 | ||||
|         trace_nbd_negotiate_meta_query_parse("dirty-bitmap:"); | ||||
|         if (!meta->exp->export_bitmap) { | ||||
|             trace_nbd_negotiate_meta_query_skip("no dirty-bitmap exported"); | ||||
|             return true; | ||||
|         } | ||||
|         if (nbd_meta_empty_or_pattern(client, | ||||
|                                       meta->exp->export_bitmap_context + | ||||
|                                       strlen("qemu:dirty-bitmap:"), query)) { | ||||
|         bm_name = bdrv_dirty_bitmap_name(meta->exp->export_bitmap); | ||||
|         if (nbd_meta_empty_or_pattern(client, bm_name, query)) { | ||||
|             meta->bitmap = true; | ||||
|         } | ||||
|         return true; | ||||
| @ -1004,8 +1004,11 @@ static int nbd_negotiate_meta_queries(NBDClient *client, | ||||
|     } | ||||
| 
 | ||||
|     if (meta->bitmap) { | ||||
|         ret = nbd_negotiate_send_meta_context(client, | ||||
|                                               meta->exp->export_bitmap_context, | ||||
|         const char *bm_name = bdrv_dirty_bitmap_name(meta->exp->export_bitmap); | ||||
|         g_autofree char *context = g_strdup_printf("qemu:dirty-bitmap:%s", | ||||
|                                                    bm_name); | ||||
| 
 | ||||
|         ret = nbd_negotiate_send_meta_context(client, context, | ||||
|                                               NBD_META_ID_DIRTY_BITMAP, | ||||
|                                               errp); | ||||
|         if (ret < 0) { | ||||
| @ -1576,9 +1579,6 @@ static int nbd_export_create(BlockExport *blk_exp, BlockExportOptions *exp_args, | ||||
|         bdrv_dirty_bitmap_set_busy(bm, true); | ||||
|         exp->export_bitmap = bm; | ||||
|         assert(strlen(bitmap) <= BDRV_BITMAP_MAX_NAME_SIZE); | ||||
|         exp->export_bitmap_context = g_strdup_printf("qemu:dirty-bitmap:%s", | ||||
|                                                      bitmap); | ||||
|         assert(strlen(exp->export_bitmap_context) < NBD_MAX_STRING_SIZE); | ||||
|     } | ||||
| 
 | ||||
|     blk_add_aio_context_notifier(blk, blk_aio_attached, blk_aio_detach, exp); | ||||
| @ -1656,7 +1656,6 @@ static void nbd_export_delete(BlockExport *blk_exp) | ||||
| 
 | ||||
|     if (exp->export_bitmap) { | ||||
|         bdrv_dirty_bitmap_set_busy(exp->export_bitmap, false); | ||||
|         g_free(exp->export_bitmap_context); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Eric Blake
						Eric Blake