@@ -1575,6 +1575,59 @@ rpc_bdev_lvol_set_read_only(struct spdk_jsonrpc_request *request,
1575
1575
1576
1576
SPDK_RPC_REGISTER ("bdev_lvol_set_read_only" , rpc_bdev_lvol_set_read_only , SPDK_RPC_RUNTIME )
1577
1577
1578
+ struct rpc_set_ro_lvs_bdev {
1579
+ char * lvs_name ;
1580
+ char * uuid ;
1581
+ bool read_only ;
1582
+
1583
+ };
1584
+
1585
+ static void
1586
+ free_rpc_set_ro_lvs_bdev (struct rpc_set_ro_lvs_bdev * req )
1587
+ {
1588
+ free (req -> lvs_name );
1589
+ free (req -> uuid );
1590
+ }
1591
+
1592
+ static const struct spdk_json_object_decoder rpc_set_ro_lvs_bdev_decoders [] = {
1593
+ {"lvs_name" , offsetof(struct rpc_set_ro_lvs_bdev , lvs_name ), spdk_json_decode_string , true},
1594
+ {"uuid" , offsetof(struct rpc_set_ro_lvs_bdev , uuid ), spdk_json_decode_string , true},
1595
+ {"read_only" , offsetof(struct rpc_set_ro_lvs_bdev , read_only ), spdk_json_decode_bool },
1596
+ };
1597
+
1598
+ static void
1599
+ rpc_bdev_lvol_set_lvs_read_only (struct spdk_jsonrpc_request * request ,
1600
+ const struct spdk_json_val * params )
1601
+ {
1602
+ struct rpc_set_ro_lvs_bdev req = {};
1603
+ struct spdk_lvol_store * lvs = NULL ;
1604
+ int rc ;
1605
+
1606
+ SPDK_INFOLOG (lvol_rpc , "Setting lvol as read only\n" );
1607
+
1608
+ if (spdk_json_decode_object (params , rpc_set_ro_lvs_bdev_decoders ,
1609
+ SPDK_COUNTOF (rpc_set_ro_lvs_bdev_decoders ),
1610
+ & req )) {
1611
+ SPDK_INFOLOG (lvol_rpc , "spdk_json_decode_object failed\n" );
1612
+ spdk_jsonrpc_send_error_response (request , SPDK_JSONRPC_ERROR_INTERNAL_ERROR ,
1613
+ "spdk_json_decode_object failed" );
1614
+ goto cleanup ;
1615
+ }
1616
+
1617
+ rc = vbdev_get_lvol_store_by_uuid_xor_name (req .uuid , req .lvs_name , & lvs );
1618
+ if (rc != 0 ) {
1619
+ spdk_jsonrpc_send_error_response (request , rc , spdk_strerror (- rc ));
1620
+ goto cleanup ;
1621
+ }
1622
+
1623
+ spdk_lvs_set_read_only (lvs , req .read_only );
1624
+ spdk_jsonrpc_send_bool_response (request , true);
1625
+ cleanup :
1626
+ free_rpc_set_ro_lvs_bdev (& req );
1627
+ }
1628
+
1629
+ SPDK_RPC_REGISTER ("bdev_lvol_set_lvs_read_only" , rpc_bdev_lvol_set_lvs_read_only , SPDK_RPC_RUNTIME )
1630
+
1578
1631
struct rpc_bdev_lvol_delete {
1579
1632
char * name ;
1580
1633
bool sync ;
@@ -1699,6 +1752,7 @@ rpc_dump_lvol_store_info(struct spdk_json_write_ctx *w, struct lvol_store_bdev *
1699
1752
spdk_json_write_named_uuid (w , "uuid" , & lvs_bdev -> lvs -> uuid );
1700
1753
spdk_json_write_named_string (w , "name" , lvs_bdev -> lvs -> name );
1701
1754
spdk_json_write_named_bool (w , "lvs leadership" , lvs_bdev -> lvs -> leader );
1755
+ spdk_json_write_named_bool (w , "lvs_read_only" , lvs_bdev -> lvs -> read_only );
1702
1756
spdk_json_write_named_string (w , "base_bdev" , spdk_bdev_get_name (lvs_bdev -> bdev ));
1703
1757
spdk_json_write_named_uint64 (w , "total_data_clusters" , spdk_bs_total_data_cluster_count (bs ));
1704
1758
spdk_json_write_named_uint64 (w , "free_clusters" , spdk_bs_free_cluster_count (bs ));
0 commit comments