Commit 3ce759a1 authored by Xiaodong Liu's avatar Xiaodong Liu Committed by Changpeng Liu
Browse files

blobfs: add blobfs_detect RPC



Add module blobfs_bdev as a general module to simplify
the operations of blobfs on bdev. Then its functions
can be utilized by other libraries or apps.

blobfs_detect can be used to detect whether there is
one blobfs on given bdev.

Change-Id: Ib425574816061dc945fb652b539f791a44097a43
Signed-off-by: default avatarXiaodong Liu <xiaodong.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/466486


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent e4e6c256
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -73,6 +73,12 @@ function has been deprecated.
The new create function can cowork with spdk_bdev_open_ext function, which provides callback
function that will be called by asynchronous event such as bdev removal.

### blobfs_bdev

A new blobfs module `bdev` has been added to simplify the operations of blobfs on bdev.

Function spdk_blobfs_bdev_detect is added to detect whether blobfs exists on the given block device.

### nvme

Added `no_shn_notification` to NVMe controller initialization options, users can enable
@@ -129,6 +135,8 @@ Added optional parameter '--md-size' to 'construct_null_bdev' RPC method.
Added optional parameters '--dif-type' and '--dif-is-head-of-md' to 'construct_null_bdev'
RPC method.

Added `blobfs_detect` RPC method to detect whether a blobfs exists on given bdev.

## v19.07:

### ftl
+1 −0
Original line number Diff line number Diff line
@@ -203,6 +203,7 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then
	if [ $SPDK_TEST_BLOBFS -eq 1 ]; then
		run_test suite ./test/blobfs/rocksdb/rocksdb.sh
		run_test suite ./test/blobstore/blobstore.sh
		run_test suite ./test/blobfs/blobfs.sh
	fi

	if [ $SPDK_TEST_NVMF -eq 1 ]; then
+41 −0
Original line number Diff line number Diff line
@@ -5693,6 +5693,47 @@ Example response:
}
~~~

# Blobfs {#jsonrpc_components_blobfs}

## blobfs_detect {#rpc_blobfs_detect}

Detect whether a blobfs exists on bdev.

### Parameters

Name                    | Optional | Type        | Description
----------------------- | -------- | ----------- | -----------
bdev_name               | Required | string      | Block device name to detect blobfs

### Response

True if a blobfs exists on the bdev; False otherwise.

### Example

Example request:

~~~
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "blobfs_detect",
  "params": {
    "bdev_name": "Malloc0"
  }
}
~~~

Example response:

~~~
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "true"
}
~~~

# Miscellaneous RPC commands

## bdev_nvme_send_cmd {#rpc_bdev_nvme_send_cmd}
+70 −0
Original line number Diff line number Diff line
/*-
 *   BSD LICENSE
 *
 *   Copyright (c) Intel Corporation.
 *   All rights reserved.
 *
 *   Redistribution and use in source and binary forms, with or without
 *   modification, are permitted provided that the following conditions
 *   are met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in
 *       the documentation and/or other materials provided with the
 *       distribution.
 *     * Neither the name of Intel Corporation nor the names of its
 *       contributors may be used to endorse or promote products derived
 *       from this software without specific prior written permission.
 *
 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/** \file
 * Operations on blobfs whose backing device is spdk_bdev
 */

#ifndef SPDK_BLOBFS_BDEV_H
#define SPDK_BLOBFS_BDEV_H

#include "spdk/stdinc.h"
#include "spdk/bdev.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * blobfs on bdev operation completion callback.
 *
 * \param cb_arg Callback argument.
 * \param fserrno 0 if it completed successfully, or negative errno if it failed.
 */
typedef void (*spdk_blobfs_bdev_op_complete)(void *cb_arg, int fserrno);

/**
 * Detect whether blobfs exists on the given device.
 *
 * \param bdev_name Name of block device.
 * \param cb_fn Called when the detecting is complete. fserrno is -EILSEQ if no blobfs exists.
 * \param cb_arg Argument passed to function cb_fn.
 */
void spdk_blobfs_bdev_detect(const char *bdev_name,
			     spdk_blobfs_bdev_op_complete cb_fn, void *cb_arg);

#ifdef __cplusplus
}
#endif

#endif /* SPDK_BLOBFS_BDEV_H */
+3 −0
Original line number Diff line number Diff line
@@ -97,6 +97,9 @@ BDEV_DEPS_CONF_THREAD = $(BDEV_DEPS) conf thread
# module/blob
DEPDIRS-blob_bdev := log thread bdev

# module/blobfs
DEPDIRS-blobfs_bdev := $(BDEV_DEPS_THREAD) blob_bdev blobfs

# module/copy
DEPDIRS-copy_ioat := log ioat conf thread $(JSON_LIBS) copy

Loading