Actually it's already fixed, but is wrongly included in the next patch
[2/2].
Anyway, I just resent v2 patches, please use latest one. Version number
is not increased because there's no changed after both patches are applied.
On 26/5/24 2:18 am, Vasily Averin wrote:
On 5/23/24 13:54, Liu Kui wrote:
+/*
+ * Register a MR
+ */
+int pcs_reg_mr(struct pcs_mr_set *mrs, u64 start, u64 len)
+{
+ int ret = 0;
+ struct pcs_mr *mr;
+ struct pcs_umem *umem;
+
+ if (!len)
+ return -EINVAL;
+
+ if (!can_do_mlock())
+ return -EPERM;
+
+ if (atomic_inc_return(&mrs->mr_num) > PCS_MAX_MR) {
+ atomic_dec(&mrs->mr_num);
+ return -ENOMEM;
+ }
+
+ umem = pcs_umem_get(start, len);
+ if (IS_ERR(umem))
atomic_dec(&mrs->mr_num) is still missing here.
Did you resend old patch version perhaps?
+ return PTR_ERR(umem);
+
+ mr = kzalloc(sizeof(*mr), GFP_KERNEL);
+ if (!mr) {
+ ret = -ENOMEM;
+ goto err_out;
+ }
+
+ mr->mrs = mrs;
+ mr->va = start;
+ mr->len = len;
+ mr->umem = umem;
+ kref_init(&mr->ref);
+
+ ret = xa_alloc_cyclic(&mrs->mr_xa, &mr->id, mr,
+ XA_LIMIT(1, PCS_MAX_MR), &mrs->mr_next, GFP_KERNEL);
+ if (ret < 0) {
+ kfree(mr);
+ goto err_out;
+ }
+
+ mr->id_valid = 1;
+
+ return mr->id;
+
+err_out:
+ pcs_umem_release(umem);
+ atomic_dec(&mrs->mr_num);
+ return ret;
+}
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel