Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
5b10ff0
pinctrl: meson-axg: add missing GPIOA_18 gpio group
hundeboll May 12, 2023
89c0c62
s390/cio: unregister device when the only path is gone
vneethv May 4, 2023
40ba041
ASoC: codecs: wsa883x: do not set can_multi_write flag
Srinivas-Kandagatla May 23, 2023
6e7a6d4
ASoC: codecs: wsa881x: do not set can_multi_write flag
Srinivas-Kandagatla May 23, 2023
2d7c2f9
ASoC: codecs: wcd938x-sdw: do not set can_multi_write flag
Srinivas-Kandagatla May 23, 2023
8938f75
ASoC: simple-card: Add missing of_node_put() in case of error
hcodina May 23, 2023
b6b5c64
ASoC: amd: ps: fix for acp_lock access in pdm driver
vijendarmukunda May 25, 2023
e384dba
ASoC: nau8824: Add quirk to active-high jack-detect
drosdeck May 29, 2023
57d1e89
ASoC: amd: yc: Add Thinkpad Neo14 to quirks list for acp6x
KevinSJ May 31, 2023
fd67a7a
ASoC: mediatek: mt8188: fix use-after-free in driver remove path
wenliangwu Jun 1, 2023
dc93f0d
ASoC: mediatek: mt8195: fix use-after-free in driver remove path
wenliangwu Jun 1, 2023
0e2ee34
ASoC: max98363: Removed 32bit support
Jun 1, 2023
3a67ad1
ASoC: max98363: limit the number of channel to 1
Jun 1, 2023
524306c
ASoC: cs35l56: Remove NULL check from cs35l56_sdw_dai_set_stream()
rfvirgil Jun 1, 2023
03c5c83
s390/purgatory: disable branch profiling
May 25, 2023
ce78930
ASoC: mediatek: fix use-after-free in driver remove
broonie Jun 1, 2023
635071f
ASoC: simple-card-utils: fix PCM constraint error check
robhancocksed Jun 2, 2023
32cf004
ASoC: fsl_sai: Enable BCI bit if SAI works on synchronous mode with B…
May 30, 2023
ddad593
blk-mq: fix blk_mq_hw_ctx active request accounting
tilan7663 May 13, 2023
bd57488
selftests: alsa: pcm-test: Fix compiler warnings about the format
May 24, 2023
527c356
ALSA: hda/realtek: Add a quirk for HP Slim Desktop S01
TomAi0 May 26, 2023
7ca4c8d
ALSA: hda/realtek: Add Lenovo P3 Tower platform
Jun 2, 2023
1a93f10
ALSA: hda/realtek: Add "Intel Reference board" and "NUC 13" SSID in t…
syedk008 Jun 2, 2023
811dd42
ALSA: hda/realtek: Add quirks for Asus ROG 2024 laptops using CS35L41
Jun 5, 2023
da209f7
ALSA: hda/realtek: Add quirk for Clevo NS50AU
crawfxrd Jun 5, 2023
8cfb981
null_blk: Fix: memory release when memory_backed=1
nj-shetty Jun 5, 2023
b9a4efd
ALSA: ice1712,ice1724: fix the kcontrol->id initialization
perexg Jun 6, 2023
09fe05c
rbd: move RBD_OBJ_FLAG_COPYUP_ENABLED flag setting
idryomov Jun 5, 2023
870611e
rbd: get snapshot context after exclusive lock is ensured to be held
idryomov Jun 5, 2023
c9b83ae
ALSA: ymfpci: Fix kctl->id initialization
tiwai Jun 6, 2023
f2f312a
ALSA: cmipci: Fix kctl->id initialization
tiwai Jun 6, 2023
c5ae57b
ALSA: gus: Fix kctl->id initialization
tiwai Jun 6, 2023
5c219a3
ALSA: hda: Fix kctl->id initialization
tiwai Jun 6, 2023
08c9aa7
Merge tag 'asoc-fix-v6.4-rc6' of https://git.kernel.org/pub/scm/linux…
tiwai Jun 6, 2023
95ae997
gpio: sim: fix memory corruption when adding named lines and unnamed …
warthog618 Jun 6, 2023
b752a38
ALSA: hda/realtek: Enable 4 amplifiers instead of 2 on a HP platform
mschiu77 Jun 6, 2023
d7459ef
gpio: sim: quietly ignore configured lines outside the bank
warthog618 Jun 7, 2023
d1f11f4
MAINTAINERS: add Andy Shevchenko as reviewer for the GPIO subsystem
Jun 5, 2023
6569fc1
riscv: mm: Ensure prot of VM_WRITE and VM_EXEC must be readable
woodrow-shen Apr 25, 2023
25abe0d
riscv: Fix kfence now that the linear mapping can be backed by PUD/P4…
Jun 6, 2023
49a0a37
riscv: Check the virtual alignment before choosing a map size
Jun 7, 2023
4d8df0f
vhost: use kzalloc() instead of kmalloc() followed by memset()
devpraton May 22, 2023
409e873
ceph: fix use-after-free bug for inodes when flushing capsnaps
lxbsz Jun 1, 2023
1b29243
Revert "ext4: don't clear SB_RDONLY when remounting r/w until quota i…
tytso Jun 8, 2023
dea9d8f
ext4: only check dquot_initialize_needed() when debugging
tytso Jun 8, 2023
99a670b
riscv: fix kprobe __user string arg print fault issue
May 4, 2023
a90e860
vduse: avoid empty string for dev name
zhaoshane May 30, 2023
57380fd
tools/virtio: Fix arm64 ringtest compilation error
Rtoax May 24, 2023
c66dbc3
tools/virtio: Add .gitignore for ringtest
Rtoax May 25, 2023
73790bd
vdpa/mlx5: Fix hang when cvq commands are triggered during device unr…
dtatulea May 16, 2023
376daf3
vhost_vdpa: tell vqs about the negotiated
emusln Apr 24, 2023
1f5d2e3
vhost_net: revert upend_idx only on retriable error
Apr 24, 2023
a284f09
vhost: Fix crash during early vhost_transport_send_pkt calls
mikechristie Jun 7, 2023
4b13cbe
vhost: Fix worker hangs due to missed wake up calls
mikechristie Jun 7, 2023
8fc1c59
Merge tag 'ext4_for_linus_stable' of git://git.kernel.org/pub/scm/lin…
torvalds Jun 9, 2023
697fa9b
Merge tag 'sound-6.4-rc6' of git://git.kernel.org/pub/scm/linux/kerne…
torvalds Jun 9, 2023
333a396
Merge tag 'pinctrl-v6.4-2' of git://git.kernel.org/pub/scm/linux/kern…
torvalds Jun 9, 2023
55d8122
vhost: support PACKED when setting-getting vring_base
emusln Apr 24, 2023
beee7fd
vhost_vdpa: support PACKED when setting-getting vring_base
emusln Apr 24, 2023
07496ee
tools/virtio: use canonical ftrace path
Feb 15, 2023
92d2221
Merge tag 'gpio-fixes-for-v6.4-rc6' of git://git.kernel.org/pub/scm/l…
torvalds Jun 9, 2023
87aceaa
Merge tag 's390-6.4-3' of git://git.kernel.org/pub/scm/linux/kernel/g…
torvalds Jun 9, 2023
0f506c7
Merge tag 'riscv-for-linus-6.4-rc6' of git://git.kernel.org/pub/scm/l…
torvalds Jun 9, 2023
ccc45cb
s390/dasd: Use correct lock while counting channel queue length
hoeppnerj Jun 9, 2023
7e8c948
Merge tag 'ceph-for-6.4-rc6' of https://github.com/ceph/ceph-client
torvalds Jun 9, 2023
dbfa18c
Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/gi…
torvalds Jun 9, 2023
6456952
Merge tag 'block-6.4-2023-06-09' of git://git.kernel.dk/linux
torvalds Jun 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -8799,6 +8799,7 @@ F: include/linux/gpio/regmap.h
GPIO SUBSYSTEM
M: Linus Walleij <linus.walleij@linaro.org>
M: Bartosz Golaszewski <brgl@bgdev.pl>
R: Andy Shevchenko <andy@kernel.org>
L: linux-gpio@vger.kernel.org
S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git
Expand Down
1 change: 1 addition & 0 deletions arch/riscv/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ config RISCV
select ARCH_HAS_GIGANTIC_PAGE
select ARCH_HAS_KCOV
select ARCH_HAS_MMIOWB
select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
select ARCH_HAS_PMEM_API
select ARCH_HAS_PTE_SPECIAL
select ARCH_HAS_SET_DIRECT_MAP if MMU
Expand Down
33 changes: 0 additions & 33 deletions arch/riscv/include/asm/kfence.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,41 +8,8 @@
#include <asm-generic/pgalloc.h>
#include <asm/pgtable.h>

static inline int split_pmd_page(unsigned long addr)
{
int i;
unsigned long pfn = PFN_DOWN(__pa((addr & PMD_MASK)));
pmd_t *pmd = pmd_off_k(addr);
pte_t *pte = pte_alloc_one_kernel(&init_mm);

if (!pte)
return -ENOMEM;

for (i = 0; i < PTRS_PER_PTE; i++)
set_pte(pte + i, pfn_pte(pfn + i, PAGE_KERNEL));
set_pmd(pmd, pfn_pmd(PFN_DOWN(__pa(pte)), PAGE_TABLE));

flush_tlb_kernel_range(addr, addr + PMD_SIZE);
return 0;
}

static inline bool arch_kfence_init_pool(void)
{
int ret;
unsigned long addr;
pmd_t *pmd;

for (addr = (unsigned long)__kfence_pool; is_kfence_address((void *)addr);
addr += PAGE_SIZE) {
pmd = pmd_off_k(addr);

if (pmd_leaf(*pmd)) {
ret = split_pmd_page(addr);
if (ret)
return false;
}
}

return true;
}

Expand Down
3 changes: 1 addition & 2 deletions arch/riscv/include/asm/pgtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,7 @@ extern struct pt_alloc_ops pt_ops __initdata;
_PAGE_EXEC | _PAGE_WRITE)

#define PAGE_COPY PAGE_READ
#define PAGE_COPY_EXEC PAGE_EXEC
#define PAGE_COPY_READ_EXEC PAGE_READ_EXEC
#define PAGE_COPY_EXEC PAGE_READ_EXEC
#define PAGE_SHARED PAGE_WRITE
#define PAGE_SHARED_EXEC PAGE_WRITE_EXEC

Expand Down
48 changes: 37 additions & 11 deletions arch/riscv/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#ifdef CONFIG_RELOCATABLE
#include <linux/elf.h>
#endif
#include <linux/kfence.h>

#include <asm/fixmap.h>
#include <asm/tlbflush.h>
Expand Down Expand Up @@ -293,7 +294,7 @@ static const pgprot_t protection_map[16] = {
[VM_EXEC] = PAGE_EXEC,
[VM_EXEC | VM_READ] = PAGE_READ_EXEC,
[VM_EXEC | VM_WRITE] = PAGE_COPY_EXEC,
[VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_READ_EXEC,
[VM_EXEC | VM_WRITE | VM_READ] = PAGE_COPY_EXEC,
[VM_SHARED] = PAGE_NONE,
[VM_SHARED | VM_READ] = PAGE_READ,
[VM_SHARED | VM_WRITE] = PAGE_SHARED,
Expand Down Expand Up @@ -659,18 +660,19 @@ void __init create_pgd_mapping(pgd_t *pgdp,
create_pgd_next_mapping(nextp, va, pa, sz, prot);
}

static uintptr_t __init best_map_size(phys_addr_t base, phys_addr_t size)
static uintptr_t __init best_map_size(phys_addr_t pa, uintptr_t va,
phys_addr_t size)
{
if (!(base & (PGDIR_SIZE - 1)) && size >= PGDIR_SIZE)
if (!(pa & (PGDIR_SIZE - 1)) && !(va & (PGDIR_SIZE - 1)) && size >= PGDIR_SIZE)
return PGDIR_SIZE;

if (!(base & (P4D_SIZE - 1)) && size >= P4D_SIZE)
if (!(pa & (P4D_SIZE - 1)) && !(va & (P4D_SIZE - 1)) && size >= P4D_SIZE)
return P4D_SIZE;

if (!(base & (PUD_SIZE - 1)) && size >= PUD_SIZE)
if (!(pa & (PUD_SIZE - 1)) && !(va & (PUD_SIZE - 1)) && size >= PUD_SIZE)
return PUD_SIZE;

if (!(base & (PMD_SIZE - 1)) && size >= PMD_SIZE)
if (!(pa & (PMD_SIZE - 1)) && !(va & (PMD_SIZE - 1)) && size >= PMD_SIZE)
return PMD_SIZE;

return PAGE_SIZE;
Expand Down Expand Up @@ -1167,14 +1169,16 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
}

static void __init create_linear_mapping_range(phys_addr_t start,
phys_addr_t end)
phys_addr_t end,
uintptr_t fixed_map_size)
{
phys_addr_t pa;
uintptr_t va, map_size;

for (pa = start; pa < end; pa += map_size) {
va = (uintptr_t)__va(pa);
map_size = best_map_size(pa, end - pa);
map_size = fixed_map_size ? fixed_map_size :
best_map_size(pa, va, end - pa);

create_pgd_mapping(swapper_pg_dir, va, pa, map_size,
pgprot_from_va(va));
Expand All @@ -1184,6 +1188,7 @@ static void __init create_linear_mapping_range(phys_addr_t start,
static void __init create_linear_mapping_page_table(void)
{
phys_addr_t start, end;
phys_addr_t kfence_pool __maybe_unused;
u64 i;

#ifdef CONFIG_STRICT_KERNEL_RWX
Expand All @@ -1197,6 +1202,19 @@ static void __init create_linear_mapping_page_table(void)
memblock_mark_nomap(krodata_start, krodata_size);
#endif

#ifdef CONFIG_KFENCE
/*
* kfence pool must be backed by PAGE_SIZE mappings, so allocate it
* before we setup the linear mapping so that we avoid using hugepages
* for this region.
*/
kfence_pool = memblock_phys_alloc(KFENCE_POOL_SIZE, PAGE_SIZE);
BUG_ON(!kfence_pool);

memblock_mark_nomap(kfence_pool, KFENCE_POOL_SIZE);
__kfence_pool = __va(kfence_pool);
#endif

/* Map all memory banks in the linear mapping */
for_each_mem_range(i, &start, &end) {
if (start >= end)
Expand All @@ -1207,17 +1225,25 @@ static void __init create_linear_mapping_page_table(void)
if (end >= __pa(PAGE_OFFSET) + memory_limit)
end = __pa(PAGE_OFFSET) + memory_limit;

create_linear_mapping_range(start, end);
create_linear_mapping_range(start, end, 0);
}

#ifdef CONFIG_STRICT_KERNEL_RWX
create_linear_mapping_range(ktext_start, ktext_start + ktext_size);
create_linear_mapping_range(ktext_start, ktext_start + ktext_size, 0);
create_linear_mapping_range(krodata_start,
krodata_start + krodata_size);
krodata_start + krodata_size, 0);

memblock_clear_nomap(ktext_start, ktext_size);
memblock_clear_nomap(krodata_start, krodata_size);
#endif

#ifdef CONFIG_KFENCE
create_linear_mapping_range(kfence_pool,
kfence_pool + KFENCE_POOL_SIZE,
PAGE_SIZE);

memblock_clear_nomap(kfence_pool, KFENCE_POOL_SIZE);
#endif
}

static void __init setup_vm_final(void)
Expand Down
1 change: 1 addition & 0 deletions arch/s390/purgatory/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ KBUILD_CFLAGS += -Wno-pointer-sign -Wno-sign-compare
KBUILD_CFLAGS += -fno-zero-initialized-in-bss -fno-builtin -ffreestanding
KBUILD_CFLAGS += -Os -m64 -msoft-float -fno-common
KBUILD_CFLAGS += -fno-stack-protector
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
KBUILD_CFLAGS += $(CLANG_FLAGS)
KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
KBUILD_AFLAGS := $(filter-out -DCC_USING_EXPOLINE,$(KBUILD_AFLAGS))
Expand Down
8 changes: 4 additions & 4 deletions block/blk-mq.c
Original file line number Diff line number Diff line change
Expand Up @@ -683,6 +683,10 @@ static void __blk_mq_free_request(struct request *rq)
blk_crypto_free_request(rq);
blk_pm_mark_last_busy(rq);
rq->mq_hctx = NULL;

if (rq->rq_flags & RQF_MQ_INFLIGHT)
__blk_mq_dec_active_requests(hctx);

if (rq->tag != BLK_MQ_NO_TAG)
blk_mq_put_tag(hctx->tags, ctx, rq->tag);
if (sched_tag != BLK_MQ_NO_TAG)
Expand All @@ -694,15 +698,11 @@ static void __blk_mq_free_request(struct request *rq)
void blk_mq_free_request(struct request *rq)
{
struct request_queue *q = rq->q;
struct blk_mq_hw_ctx *hctx = rq->mq_hctx;

if ((rq->rq_flags & RQF_ELVPRIV) &&
q->elevator->type->ops.finish_request)
q->elevator->type->ops.finish_request(rq);

if (rq->rq_flags & RQF_MQ_INFLIGHT)
__blk_mq_dec_active_requests(hctx);

if (unlikely(laptop_mode && !blk_rq_is_passthrough(rq)))
laptop_io_completion(q->disk->bdi);

Expand Down
1 change: 1 addition & 0 deletions drivers/block/null_blk/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2244,6 +2244,7 @@ static void null_destroy_dev(struct nullb *nullb)
struct nullb_device *dev = nullb->dev;

null_del_dev(nullb);
null_free_device_storage(dev, false);
null_free_dev(dev);
}

Expand Down
62 changes: 44 additions & 18 deletions drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1334,14 +1334,30 @@ static bool rbd_obj_is_tail(struct rbd_obj_request *obj_req)
/*
* Must be called after rbd_obj_calc_img_extents().
*/
static bool rbd_obj_copyup_enabled(struct rbd_obj_request *obj_req)
static void rbd_obj_set_copyup_enabled(struct rbd_obj_request *obj_req)
{
if (!obj_req->num_img_extents ||
(rbd_obj_is_entire(obj_req) &&
!obj_req->img_request->snapc->num_snaps))
return false;
rbd_assert(obj_req->img_request->snapc);

return true;
if (obj_req->img_request->op_type == OBJ_OP_DISCARD) {
dout("%s %p objno %llu discard\n", __func__, obj_req,
obj_req->ex.oe_objno);
return;
}

if (!obj_req->num_img_extents) {
dout("%s %p objno %llu not overlapping\n", __func__, obj_req,
obj_req->ex.oe_objno);
return;
}

if (rbd_obj_is_entire(obj_req) &&
!obj_req->img_request->snapc->num_snaps) {
dout("%s %p objno %llu entire\n", __func__, obj_req,
obj_req->ex.oe_objno);
return;
}

obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ENABLED;
}

static u64 rbd_obj_img_extents_bytes(struct rbd_obj_request *obj_req)
Expand Down Expand Up @@ -1442,6 +1458,7 @@ __rbd_obj_add_osd_request(struct rbd_obj_request *obj_req,
static struct ceph_osd_request *
rbd_obj_add_osd_request(struct rbd_obj_request *obj_req, int num_ops)
{
rbd_assert(obj_req->img_request->snapc);
return __rbd_obj_add_osd_request(obj_req, obj_req->img_request->snapc,
num_ops);
}
Expand Down Expand Up @@ -1578,15 +1595,18 @@ static void rbd_img_request_init(struct rbd_img_request *img_request,
mutex_init(&img_request->state_mutex);
}

/*
* Only snap_id is captured here, for reads. For writes, snapshot
* context is captured in rbd_img_object_requests() after exclusive
* lock is ensured to be held.
*/
static void rbd_img_capture_header(struct rbd_img_request *img_req)
{
struct rbd_device *rbd_dev = img_req->rbd_dev;

lockdep_assert_held(&rbd_dev->header_rwsem);

if (rbd_img_is_write(img_req))
img_req->snapc = ceph_get_snap_context(rbd_dev->header.snapc);
else
if (!rbd_img_is_write(img_req))
img_req->snap_id = rbd_dev->spec->snap_id;

if (rbd_dev_parent_get(rbd_dev))
Expand Down Expand Up @@ -2233,9 +2253,6 @@ static int rbd_obj_init_write(struct rbd_obj_request *obj_req)
if (ret)
return ret;

if (rbd_obj_copyup_enabled(obj_req))
obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ENABLED;

obj_req->write_state = RBD_OBJ_WRITE_START;
return 0;
}
Expand Down Expand Up @@ -2341,8 +2358,6 @@ static int rbd_obj_init_zeroout(struct rbd_obj_request *obj_req)
if (ret)
return ret;

if (rbd_obj_copyup_enabled(obj_req))
obj_req->flags |= RBD_OBJ_FLAG_COPYUP_ENABLED;
if (!obj_req->num_img_extents) {
obj_req->flags |= RBD_OBJ_FLAG_NOOP_FOR_NONEXISTENT;
if (rbd_obj_is_entire(obj_req))
Expand Down Expand Up @@ -3286,6 +3301,7 @@ static bool rbd_obj_advance_write(struct rbd_obj_request *obj_req, int *result)
case RBD_OBJ_WRITE_START:
rbd_assert(!*result);

rbd_obj_set_copyup_enabled(obj_req);
if (rbd_obj_write_is_noop(obj_req))
return true;

Expand Down Expand Up @@ -3472,9 +3488,19 @@ static int rbd_img_exclusive_lock(struct rbd_img_request *img_req)

static void rbd_img_object_requests(struct rbd_img_request *img_req)
{
struct rbd_device *rbd_dev = img_req->rbd_dev;
struct rbd_obj_request *obj_req;

rbd_assert(!img_req->pending.result && !img_req->pending.num_pending);
rbd_assert(!need_exclusive_lock(img_req) ||
__rbd_is_lock_owner(rbd_dev));

if (rbd_img_is_write(img_req)) {
rbd_assert(!img_req->snapc);
down_read(&rbd_dev->header_rwsem);
img_req->snapc = ceph_get_snap_context(rbd_dev->header.snapc);
up_read(&rbd_dev->header_rwsem);
}

for_each_obj_request(img_req, obj_req) {
int result = 0;
Expand All @@ -3492,7 +3518,6 @@ static void rbd_img_object_requests(struct rbd_img_request *img_req)

static bool rbd_img_advance(struct rbd_img_request *img_req, int *result)
{
struct rbd_device *rbd_dev = img_req->rbd_dev;
int ret;

again:
Expand All @@ -3513,9 +3538,6 @@ static bool rbd_img_advance(struct rbd_img_request *img_req, int *result)
if (*result)
return true;

rbd_assert(!need_exclusive_lock(img_req) ||
__rbd_is_lock_owner(rbd_dev));

rbd_img_object_requests(img_req);
if (!img_req->pending.num_pending) {
*result = img_req->pending.result;
Expand Down Expand Up @@ -3977,6 +3999,10 @@ static int rbd_post_acquire_action(struct rbd_device *rbd_dev)
{
int ret;

ret = rbd_dev_refresh(rbd_dev);
if (ret)
return ret;

if (rbd_dev->header.features & RBD_FEATURE_OBJECT_MAP) {
ret = rbd_object_map_open(rbd_dev);
if (ret)
Expand Down
Loading