[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] linux c/s 866



On Mon, May 04, 2009 at 10:14:17AM +0100, Jan Beulich wrote:
> >@@ -329,11 +329,15 @@ static pte_t blktap_clear_pte(struct vm_
> >      * If the address is before the start of the grant mapped region or
> >      * if vm_file is NULL (meaning mmap failed and we have nothing to do)
> >      */
> >-    if (uvaddr < uvstart || vma->vm_file == NULL)
> >+    if (vma->vm_file != NULL) {
> >+            info = vma->vm_file->private_data;
> >+            uvstart = info->rings_vstart + (RING_PAGES << PAGE_SHIFT);
> >+    } else
> >+            uvstart = uvaddr;       /* make the following if clause true */
> >+    if (uvaddr < uvstart)
> >             return ptep_get_and_clear_full(vma->vm_mm, uvaddr, 
> >                                            ptep, is_fullmm);
> 
> It would appear to me as if the comment and the code are out of sync:
> Assigning uvaddr to uvstart makes the if clause's condition false whenever
> vm->vm_file == NULL. According to how the old code worked, I'd say the
> code needs to be fixed, but I'm not certain, hence I'm hesitant to submit a
> patch...

You're quite right. Thank you for pointing out.


linux/blktap: fix blktap_clear_pte().

fix blktap_clear_pte(). In case of vma->vm_file == NULL
case wasn't handled correctly.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>

diff --git a/drivers/xen/blktap/blktap.c b/drivers/xen/blktap/blktap.c
--- a/drivers/xen/blktap/blktap.c
+++ b/drivers/xen/blktap/blktap.c
@@ -314,7 +314,7 @@ static pte_t blktap_clear_pte(struct vm_
        pte_t copy;
        tap_blkif_t *info = NULL;
        int offset, seg, usr_idx, pending_idx, mmap_idx;
-       unsigned long uvstart;
+       unsigned long uvstart = 0;
        unsigned long kvaddr;
        struct page *pg;
        struct grant_handle_pair *khandle;
@@ -328,9 +328,8 @@ static pte_t blktap_clear_pte(struct vm_
        if (vma->vm_file != NULL) {
                info = vma->vm_file->private_data;
                uvstart = info->rings_vstart + (RING_PAGES << PAGE_SHIFT);
-       } else
-               uvstart = uvaddr;       /* make the following if clause true */
-       if (uvaddr < uvstart)
+       }
+       if (vma->vm_file == NULL || uvaddr < uvstart)
                return ptep_get_and_clear_full(vma->vm_mm, uvaddr, 
                                               ptep, is_fullmm);
 

-- 
yamahata

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.