diff options
Diffstat (limited to 'arch/um/drivers/ubd_kern.c')
| -rw-r--r-- | arch/um/drivers/ubd_kern.c | 14 | 
1 files changed, 10 insertions, 4 deletions
| diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 4d8b165bfa48..9a56ff94308d 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c @@ -156,6 +156,7 @@ static struct gendisk *fake_gendisk[MAX_DEV];  static struct openflags global_openflags = OPEN_FLAGS;  struct cow { +	/* This is the backing file, actually */  	char *file;  	int fd;  	unsigned long *bitmap; @@ -927,10 +928,14 @@ static int ubd_open(struct inode *inode, struct file *filp)  		}  	}  	dev->count++; -	if((filp->f_mode & FMODE_WRITE) && !dev->openflags.w){ +	set_disk_ro(disk, !dev->openflags.w); + +	/* This should no more be needed. And it didn't work anyway to exclude +	 * read-write remounting of filesystems.*/ +	/*if((filp->f_mode & FMODE_WRITE) && !dev->openflags.w){  	        if(--dev->count == 0) ubd_close(dev);  	        err = -EROFS; -	} +	}*/   out:  	return(err);  } @@ -1096,6 +1101,7 @@ static int prepare_request(struct request *req, struct io_thread_req *io_req)  	if(req->rq_status == RQ_INACTIVE) return(1); +	/* This should be impossible now */  	if((rq_data_dir(req) == WRITE) && !dev->openflags.w){  		printk("Write attempted on readonly ubd device %s\n",   		       disk->disk_name); @@ -1243,6 +1249,7 @@ static int ubd_check_remapped(int fd, unsigned long address, int is_write,  		/* It's a write to a ubd device */ +		/* This should be impossible now */  		if(!dev->openflags.w){  			/* It's a write access on a read-only device - probably  			 * shouldn't happen.  If the kernel is trying to change @@ -1605,8 +1612,7 @@ void do_io(struct io_thread_req *req)  				}  			} while((n < len) && (n != 0));  			if (n < len) memset(&buf[n], 0, len - n); -		} -		else { +		} else {  			n = os_write_file(req->fds[bit], buf, len);  			if(n != len){  				printk("do_io - write failed err = %d " | 
