patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / drivers / block / loop.c
index 37afd96..f125094 100644 (file)
@@ -308,7 +308,9 @@ lo_read_actor(read_descriptor_t *desc, struct page *page,
                       page->index);
                desc->error = -EINVAL;
        }
-       
+
+       flush_dcache_page(p->page);
+
        desc->count = count - size;
        desc->written += size;
        p->offset += size;
@@ -949,7 +951,7 @@ loop_info64_to_old(const struct loop_info64 *info64, struct loop_info *info)
 }
 
 static int
-loop_set_status_old(struct loop_device *lo, const struct loop_info *arg)
+loop_set_status_old(struct loop_device *lo, const struct loop_info __user *arg)
 {
        struct loop_info info;
        struct loop_info64 info64;
@@ -961,7 +963,7 @@ loop_set_status_old(struct loop_device *lo, const struct loop_info *arg)
 }
 
 static int
-loop_set_status64(struct loop_device *lo, const struct loop_info64 *arg)
+loop_set_status64(struct loop_device *lo, const struct loop_info64 __user *arg)
 {
        struct loop_info64 info64;
 
@@ -971,7 +973,7 @@ loop_set_status64(struct loop_device *lo, const struct loop_info64 *arg)
 }
 
 static int
-loop_get_status_old(struct loop_device *lo, struct loop_info *arg) {
+loop_get_status_old(struct loop_device *lo, struct loop_info __user *arg) {
        struct loop_info info;
        struct loop_info64 info64;
        int err = 0;
@@ -989,7 +991,7 @@ loop_get_status_old(struct loop_device *lo, struct loop_info *arg) {
 }
 
 static int
-loop_get_status64(struct loop_device *lo, struct loop_info64 *arg) {
+loop_get_status64(struct loop_device *lo, struct loop_info64 __user *arg) {
        struct loop_info64 info64;
        int err = 0;
 
@@ -1021,16 +1023,16 @@ static int lo_ioctl(struct inode * inode, struct file * file,
                err = loop_clr_fd(lo, inode->i_bdev);
                break;
        case LOOP_SET_STATUS:
-               err = loop_set_status_old(lo, (struct loop_info *) arg);
+               err = loop_set_status_old(lo, (struct loop_info __user *) arg);
                break;
        case LOOP_GET_STATUS:
-               err = loop_get_status_old(lo, (struct loop_info *) arg);
+               err = loop_get_status_old(lo, (struct loop_info __user *) arg);
                break;
        case LOOP_SET_STATUS64:
-               err = loop_set_status64(lo, (struct loop_info64 *) arg);
+               err = loop_set_status64(lo, (struct loop_info64 __user *) arg);
                break;
        case LOOP_GET_STATUS64:
-               err = loop_get_status64(lo, (struct loop_info64 *) arg);
+               err = loop_get_status64(lo, (struct loop_info64 __user *) arg);
                break;
        default:
                err = lo->ioctl ? lo->ioctl(lo, cmd, arg) : -EINVAL;