|
@@ -1004,7 +1004,9 @@ static long mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
|
|
break;
|
|
|
|
|
|
case MON_IOCQ_RING_SIZE:
|
|
|
+ mutex_lock(&rp->fetch_lock);
|
|
|
ret = rp->b_size;
|
|
|
+ mutex_unlock(&rp->fetch_lock);
|
|
|
break;
|
|
|
|
|
|
case MON_IOCT_RING_SIZE:
|
|
@@ -1231,12 +1233,16 @@ static int mon_bin_vma_fault(struct vm_fault *vmf)
|
|
|
unsigned long offset, chunk_idx;
|
|
|
struct page *pageptr;
|
|
|
|
|
|
+ mutex_lock(&rp->fetch_lock);
|
|
|
offset = vmf->pgoff << PAGE_SHIFT;
|
|
|
- if (offset >= rp->b_size)
|
|
|
+ if (offset >= rp->b_size) {
|
|
|
+ mutex_unlock(&rp->fetch_lock);
|
|
|
return VM_FAULT_SIGBUS;
|
|
|
+ }
|
|
|
chunk_idx = offset / CHUNK_SIZE;
|
|
|
pageptr = rp->b_vec[chunk_idx].pg;
|
|
|
get_page(pageptr);
|
|
|
+ mutex_unlock(&rp->fetch_lock);
|
|
|
vmf->page = pageptr;
|
|
|
return 0;
|
|
|
}
|