From 3043591e9a98f2c35dc97686590ab0a76926237d Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Sat, 24 Mar 2018 16:04:35 +0900 Subject: [PATCH] hfi1_user_exp_rcv_overlapping(): fix return value when overlapping --- kernel/user_exp_rcv.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/user_exp_rcv.c b/kernel/user_exp_rcv.c index 2e644985..d42ffc54 100644 --- a/kernel/user_exp_rcv.c +++ b/kernel/user_exp_rcv.c @@ -621,7 +621,13 @@ int hfi1_user_exp_rcv_overlapping(unsigned long start, unsigned long end) " in munmap for 0x%lx:%lu-0x%lx\n", __FUNCTION__, node->start, node->len, start, end - start, end); tid_rb_invalidate(fd, node); - node->range = range; + if (node->range) { + kprintf("%s: WARNING: node->range is already set for 0x%lx:%lu\n", + __FUNCTION__, start, end); + } + else { + node->range = range; + } ++range->refcnt; node = __hfi1_search_rb_overlapping_node( @@ -629,11 +635,12 @@ int hfi1_user_exp_rcv_overlapping(unsigned long start, unsigned long end) start, end); } - if (ret != 0) { + if (range->refcnt == 0) { kfree(range); } else { list_add_tail(&range->list, &vm->vm_deferred_unmap_range_list); + ret = range->refcnt; } //ihk_mc_spinlock_unlock_noirq(&vm->vm_deferred_unmap_lock);