static int lock_all_bitmaps(struct mddev *mddev) { int slot, my_slot, ret, held = 1, i = 0; char str[64]; struct md_cluster_info *cinfo = mddev->cluster_info; cinfo->other_bitmap_lockres = kzalloc((mddev->bitmap_info.nodes - 1) * sizeof(struct dlm_lock_resource *), GFP_KERNEL); if (!cinfo->other_bitmap_lockres) { pr_err("md: can't alloc mem for other bitmap locks\n"); return 0; } my_slot = slot_number(mddev); for (slot = 0; slot < mddev->bitmap_info.nodes; slot++) { if (slot == my_slot) continue; memset(str, '\0', 64); snprintf(str, 64, "bitmap%04d", slot); cinfo->other_bitmap_lockres[i] = lockres_init(mddev, str, NULL, 1); if (!cinfo->other_bitmap_lockres[i]) return -ENOMEM; cinfo->other_bitmap_lockres[i]->flags |= DLM_LKF_NOQUEUE; ret = dlm_lock_sync(cinfo->other_bitmap_lockres[i], DLM_LOCK_PW); if (ret) held = -1; i++; } return held; }
inline constexpr slot_number to_slot_number(h_subframe_tuple ) { return slot_number(0); }