diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c
index 92e069e..3aa3516 100644
--- a/arch/um/drivers/chan_kern.c
+++ b/arch/um/drivers/chan_kern.c
@@ -98,7 +98,7 @@
 {
 	int n;
 
-	n = os_read_file_k(fd, c_out, sizeof(*c_out));
+	n = os_read_file(fd, c_out, sizeof(*c_out));
 
 	if(n == -EAGAIN)
 		return 0;
@@ -111,7 +111,7 @@
 
 int generic_write(int fd, const char *buf, int n, void *unused)
 {
-	return os_write_file_k(fd, buf, n);
+	return os_write_file(fd, buf, n);
 }
 
 int generic_window_size(int fd, void *unused, unsigned short *rows_out,
diff --git a/arch/um/drivers/chan_user.c b/arch/um/drivers/chan_user.c
index a15be17..13f0bf8 100644
--- a/arch/um/drivers/chan_user.c
+++ b/arch/um/drivers/chan_user.c
@@ -85,7 +85,7 @@
 
 	pty_fd = data->pty_fd;
 	pipe_fd = data->pipe_fd;
-	count = os_write_file_k(pipe_fd, &c, sizeof(c));
+	count = os_write_file(pipe_fd, &c, sizeof(c));
 	if(count != sizeof(c))
 		printk("winch_thread : failed to write synchronization "
 		       "byte, err = %d\n", -count);
@@ -120,7 +120,7 @@
 	 * host - since they are not different kernel threads, we cannot use
 	 * kernel semaphores. We don't use SysV semaphores because they are
 	 * persistent. */
-	count = os_read_file_k(pipe_fd, &c, sizeof(c));
+	count = os_read_file(pipe_fd, &c, sizeof(c));
 	if(count != sizeof(c))
 		printk("winch_thread : failed to read synchronization byte, "
 		       "err = %d\n", -count);
@@ -130,7 +130,7 @@
 		 * are blocked.*/
 		sigsuspend(&sigs);
 
-		count = os_write_file_k(pipe_fd, &c, sizeof(c));
+		count = os_write_file(pipe_fd, &c, sizeof(c));
 		if(count != sizeof(c))
 			printk("winch_thread : write failed, err = %d\n",
 			       -count);
@@ -162,7 +162,7 @@
 	}
 
 	*fd_out = fds[0];
-	n = os_read_file_k(fds[0], &c, sizeof(c));
+	n = os_read_file(fds[0], &c, sizeof(c));
 	if(n != sizeof(c)){
 		printk("winch_tramp : failed to read synchronization byte\n");
 		printk("read failed, err = %d\n", -n);
@@ -195,7 +195,7 @@
 		if(thread > 0){
 			register_winch_irq(thread_fd, fd, thread, tty);
 
-			count = os_write_file_k(thread_fd, &c, sizeof(c));
+			count = os_write_file(thread_fd, &c, sizeof(c));
 			if(count != sizeof(c))
 				printk("register_winch : failed to write "
 				       "synchronization byte, err = %d\n",
diff --git a/arch/um/drivers/cow_sys.h b/arch/um/drivers/cow_sys.h
index aa7bef9..1545384 100644
--- a/arch/um/drivers/cow_sys.h
+++ b/arch/um/drivers/cow_sys.h
@@ -35,7 +35,7 @@
 
 static inline int cow_write_file(int fd, void *buf, int size)
 {
-	return os_write_file_k(fd, buf, size);
+	return os_write_file(fd, buf, size);
 }
 
 #endif
diff --git a/arch/um/drivers/daemon_user.c b/arch/um/drivers/daemon_user.c
index e1fd26c..b869e38 100644
--- a/arch/um/drivers/daemon_user.c
+++ b/arch/um/drivers/daemon_user.c
@@ -94,7 +94,7 @@
 	req.version = SWITCH_VERSION;
 	req.type = REQ_NEW_CONTROL;
 	req.sock = *local_addr;
-	n = os_write_file_k(pri->control, &req, sizeof(req));
+	n = os_write_file(pri->control, &req, sizeof(req));
 	if(n != sizeof(req)){
 		printk("daemon_open : control setup request failed, err = %d\n",
 		       -n);
@@ -102,7 +102,7 @@
 		goto out_free;
 	}
 
-	n = os_read_file_k(pri->control, sun, sizeof(*sun));
+	n = os_read_file(pri->control, sun, sizeof(*sun));
 	if(n != sizeof(*sun)){
 		printk("daemon_open : read of data socket failed, err = %d\n",
 		       -n);
diff --git a/arch/um/drivers/harddog_user.c b/arch/um/drivers/harddog_user.c
index 0fbb161..5eeecf89 100644
--- a/arch/um/drivers/harddog_user.c
+++ b/arch/um/drivers/harddog_user.c
@@ -79,7 +79,7 @@
 		goto out_close_out;
 	}
 
-	n = os_read_file_k(in_fds[0], &c, sizeof(c));
+	n = os_read_file(in_fds[0], &c, sizeof(c));
 	if(n == 0){
 		printk("harddog_open - EOF on watchdog pipe\n");
 		helper_wait(pid);
@@ -118,7 +118,7 @@
 	int n;
 	char c = '\n';
 
-	n = os_write_file_k(fd, &c, sizeof(c));
+	n = os_write_file(fd, &c, sizeof(c));
 	if(n != sizeof(c)){
 		printk("ping_watchdog - write failed, err = %d\n", -n);
 		if(n < 0)
diff --git a/arch/um/drivers/hostaudio_kern.c b/arch/um/drivers/hostaudio_kern.c
index bd6688ea..10e08a8 100644
--- a/arch/um/drivers/hostaudio_kern.c
+++ b/arch/um/drivers/hostaudio_kern.c
@@ -84,7 +84,7 @@
 	if(kbuf == NULL)
 		return(-ENOMEM);
 
-	err = os_read_file_k(state->fd, kbuf, count);
+	err = os_read_file(state->fd, kbuf, count);
 	if(err < 0)
 		goto out;
 
@@ -115,7 +115,7 @@
 	if(copy_from_user(kbuf, buffer, count))
 		goto out;
 
-	err = os_write_file_k(state->fd, kbuf, count);
+	err = os_write_file(state->fd, kbuf, count);
 	if(err < 0)
 		goto out;
 	*ppos += err;
diff --git a/arch/um/drivers/net_user.c b/arch/um/drivers/net_user.c
index 8bc6688..3503cff 100644
--- a/arch/um/drivers/net_user.c
+++ b/arch/um/drivers/net_user.c
@@ -63,7 +63,7 @@
 	}
 		
 	*output = '\0';
-	ret = os_read_file_k(fd, &remain, sizeof(remain));
+	ret = os_read_file(fd, &remain, sizeof(remain));
 
 	if (ret != sizeof(remain)) {
 		expected = sizeof(remain);
@@ -73,7 +73,7 @@
 
 	while(remain != 0){
 		expected = (remain < len) ? remain : len;
-		ret = os_read_file_k(fd, output, expected);
+		ret = os_read_file(fd, output, expected);
 		if (ret != expected) {
 			str = "data";
 			goto err;
@@ -94,7 +94,7 @@
 {
 	int n;
 
-	n = os_read_file_k(fd,  buf,  len);
+	n = os_read_file(fd,  buf,  len);
 
 	if(n == -EAGAIN)
 		return 0;
@@ -122,7 +122,7 @@
 {
 	int n;
 
-	n = os_write_file_k(fd, buf, len);
+	n = os_write_file(fd, buf, len);
 
 	if(n == -EAGAIN)
 		return 0;
diff --git a/arch/um/drivers/port_kern.c b/arch/um/drivers/port_kern.c
index 75bb401..1c8efd9 100644
--- a/arch/um/drivers/port_kern.c
+++ b/arch/um/drivers/port_kern.c
@@ -113,7 +113,7 @@
 	}
 
 	if(atomic_read(&port->wait_count) == 0){
-		os_write_file_k(fd, NO_WAITER_MSG, sizeof(NO_WAITER_MSG));
+		os_write_file(fd, NO_WAITER_MSG, sizeof(NO_WAITER_MSG));
 		printk("No one waiting for port\n");
 	}
 	list_add(&conn->list, &port->pending);
diff --git a/arch/um/drivers/random.c b/arch/um/drivers/random.c
index 94838f4..e942e83 100644
--- a/arch/um/drivers/random.c
+++ b/arch/um/drivers/random.c
@@ -44,7 +44,7 @@
         int n, ret = 0, have_data;
 
         while(size){
-                n = os_read_file_k(random_fd, &data, sizeof(data));
+                n = os_read_file(random_fd, &data, sizeof(data));
                 if(n > 0){
                         have_data = n;
                         while (have_data && size) {
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index 614fe25..70509dd 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -511,8 +511,8 @@
 	int n;
 
 	while(1){
-		n = os_read_file_k(thread_fd, &req,
-				   sizeof(struct io_thread_req *));
+		n = os_read_file(thread_fd, &req,
+				 sizeof(struct io_thread_req *));
 		if(n != sizeof(req)){
 			if(n == -EAGAIN)
 				break;
@@ -1112,8 +1112,8 @@
 					(unsigned long long) req->sector << 9,
 					sg->offset, sg->length, sg->page);
 
-			n = os_write_file_k(thread_fd, &io_req,
-					    sizeof(struct io_thread_req *));
+			n = os_write_file(thread_fd, &io_req,
+					  sizeof(struct io_thread_req *));
 			if(n != sizeof(struct io_thread_req *)){
 				if(n != -EAGAIN)
 					printk("write to io thread failed, "
@@ -1366,8 +1366,8 @@
 		return 1;
 	}
 
-	n = os_write_file_k(req->fds[1], &req->bitmap_words,
-			    sizeof(req->bitmap_words));
+	n = os_write_file(req->fds[1], &req->bitmap_words,
+			  sizeof(req->bitmap_words));
 	if(n != sizeof(req->bitmap_words)){
 		printk("do_io - bitmap update failed, err = %d fd = %d\n", -n,
 		       req->fds[1]);
@@ -1411,7 +1411,7 @@
 			do {
 				buf = &buf[n];
 				len -= n;
-				n = os_read_file_k(req->fds[bit], buf, len);
+				n = os_read_file(req->fds[bit], buf, len);
 				if (n < 0) {
 					printk("do_io - read failed, err = %d "
 					       "fd = %d\n", -n, req->fds[bit]);
@@ -1421,7 +1421,7 @@
 			} while((n < len) && (n != 0));
 			if (n < len) memset(&buf[n], 0, len - n);
 		} else {
-			n = os_write_file_k(req->fds[bit], buf, len);
+			n = os_write_file(req->fds[bit], buf, len);
 			if(n != len){
 				printk("do_io - write failed err = %d "
 				       "fd = %d\n", -n, req->fds[bit]);
@@ -1451,7 +1451,7 @@
 
 	ignore_sigwinch_sig();
 	while(1){
-		n = os_read_file_k(kernel_fd, &req,
+		n = os_read_file(kernel_fd, &req,
 				 sizeof(struct io_thread_req *));
 		if(n != sizeof(struct io_thread_req *)){
 			if(n < 0)
@@ -1465,7 +1465,7 @@
 		}
 		io_count++;
 		do_io(req);
-		n = os_write_file_k(kernel_fd, &req,
+		n = os_write_file(kernel_fd, &req,
 				  sizeof(struct io_thread_req *));
 		if(n != sizeof(struct io_thread_req *))
 			printk("io_thread - write failed, fd = %d, err = %d\n",
diff --git a/arch/um/include/os.h b/arch/um/include/os.h
index 901804d..d663809 100644
--- a/arch/um/include/os.h
+++ b/arch/um/include/os.h
@@ -144,9 +144,7 @@
 extern int os_seek_file(int fd, __u64 offset);
 extern int os_open_file(char *file, struct openflags flags, int mode);
 extern int os_read_file(int fd, void *buf, int len);
-extern int os_read_file_k(int fd, void *buf, int len);
 extern int os_write_file(int fd, const void *buf, int count);
-extern int os_write_file_k(int fd, const void *buf, int len);
 extern int os_file_size(char *file, unsigned long long *size_out);
 extern int os_file_modtime(char *file, unsigned long *modtime);
 extern int os_pipe(int *fd, int stream, int close_on_exec);
diff --git a/arch/um/kernel/initrd.c b/arch/um/kernel/initrd.c
index cff73fa..16dc43e 100644
--- a/arch/um/kernel/initrd.c
+++ b/arch/um/kernel/initrd.c
@@ -63,7 +63,7 @@
 		printk("Opening '%s' failed - err = %d\n", filename, -fd);
 		return -1;
 	}
-	n = os_read_file_k(fd, buf, size);
+	n = os_read_file(fd, buf, size);
 	if(n != size){
 		printk("Read of %d bytes from '%s' failed, err = %d\n", size,
 		       filename, -n);
diff --git a/arch/um/kernel/ksyms.c b/arch/um/kernel/ksyms.c
index 7c15844..7b3e53f 100644
--- a/arch/um/kernel/ksyms.c
+++ b/arch/um/kernel/ksyms.c
@@ -62,9 +62,7 @@
 EXPORT_SYMBOL(os_set_exec_close);
 EXPORT_SYMBOL(os_getpid);
 EXPORT_SYMBOL(os_open_file);
-EXPORT_SYMBOL(os_read_file_k);
 EXPORT_SYMBOL(os_read_file);
-EXPORT_SYMBOL(os_write_file_k);
 EXPORT_SYMBOL(os_write_file);
 EXPORT_SYMBOL(os_seek_file);
 EXPORT_SYMBOL(os_lock_file);
diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c
index 77021a6..df1ad3b 100644
--- a/arch/um/kernel/physmem.c
+++ b/arch/um/kernel/physmem.c
@@ -211,7 +211,7 @@
 			panic("physmem_forget_descriptor - failed to seek "
 			      "to %lld in fd %d, error = %d\n",
 			      offset, fd, -err);
-		err = os_read_file_k(fd, addr, PAGE_SIZE);
+		err = os_read_file(fd, addr, PAGE_SIZE);
 		if(err < 0)
 			panic("physmem_forget_descriptor - failed to read "
 			      "from fd %d to 0x%p, error = %d\n",
@@ -341,7 +341,7 @@
 	 * from physmem_fd, so it needs to be written out there.
 	 */
 	os_seek_file(physmem_fd, __pa(&__syscall_stub_start));
-	os_write_file_k(physmem_fd, &__syscall_stub_start, PAGE_SIZE);
+	os_write_file(physmem_fd, &__syscall_stub_start, PAGE_SIZE);
 
 	bootmap_size = init_bootmem(pfn, pfn + delta);
 	free_bootmem(__pa(reserve_end) + bootmap_size,
diff --git a/arch/um/kernel/sigio.c b/arch/um/kernel/sigio.c
index f756e78..89f9866 100644
--- a/arch/um/kernel/sigio.c
+++ b/arch/um/kernel/sigio.c
@@ -21,7 +21,7 @@
 {
 	char c;
 
-	os_read_file_k(sigio_irq_fd, &c, sizeof(c));
+	os_read_file(sigio_irq_fd, &c, sizeof(c));
 	reactivate_fd(sigio_irq_fd, SIGIO_WRITE_IRQ);
 	return IRQ_HANDLED;
 }
diff --git a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c
index 9ac5621..e6a7778 100644
--- a/arch/um/kernel/smp.c
+++ b/arch/um/kernel/smp.c
@@ -47,7 +47,7 @@
 
 void smp_send_reschedule(int cpu)
 {
-	os_write_file_k(cpu_data[cpu].ipi_pipe[1], "R", 1);
+	os_write_file(cpu_data[cpu].ipi_pipe[1], "R", 1);
 	num_reschedules_sent++;
 }
 
@@ -59,7 +59,7 @@
 	for(i = 0; i < num_online_cpus(); i++){
 		if(i == current_thread->cpu)
 			continue;
-		os_write_file_k(cpu_data[i].ipi_pipe[1], "S", 1);
+		os_write_file(cpu_data[i].ipi_pipe[1], "S", 1);
 	}
 	printk("done\n");
 }
@@ -108,8 +108,8 @@
 		          { .pid = 	new_task->thread.mode.tt.extern_pid,
 			    .task = 	new_task } );
 	idle_threads[cpu] = new_task;
-	CHOOSE_MODE(os_write_file_k(new_task->thread.mode.tt.switch_pipe[1], &c,
-				    sizeof(c)),
+	CHOOSE_MODE(os_write_file(new_task->thread.mode.tt.switch_pipe[1], &c,
+				  sizeof(c)),
 		    ({ panic("skas mode doesn't support SMP"); }));
 	return new_task;
 }
@@ -179,7 +179,7 @@
 	int fd;
 
 	fd = cpu_data[cpu].ipi_pipe[0];
-	while (os_read_file_k(fd, &c, 1) == 1) {
+	while (os_read_file(fd, &c, 1) == 1) {
 		switch (c) {
 		case 'C':
 			smp_call_function_slave(cpu);
@@ -239,7 +239,7 @@
 	info = _info;
 
 	for_each_online_cpu(i)
-		os_write_file_k(cpu_data[i].ipi_pipe[1], "C", 1);
+		os_write_file(cpu_data[i].ipi_pipe[1], "C", 1);
 
 	while (atomic_read(&scf_started) != cpus)
 		barrier();
diff --git a/arch/um/kernel/tt/process_kern.c b/arch/um/kernel/tt/process_kern.c
index c81bd20..c631303 100644
--- a/arch/um/kernel/tt/process_kern.c
+++ b/arch/um/kernel/tt/process_kern.c
@@ -57,14 +57,14 @@
 	 * nor the value in "to" (since it was the task which stole us the CPU,
 	 * which we don't care about). */
 
-	err = os_write_file_k(to->thread.mode.tt.switch_pipe[1], &c, sizeof(c));
+	err = os_write_file(to->thread.mode.tt.switch_pipe[1], &c, sizeof(c));
 	if(err != sizeof(c))
 		panic("write of switch_pipe failed, err = %d", -err);
 
 	if(from->thread.mode.tt.switch_pipe[0] == -1)
 		os_kill_process(os_getpid(), 0);
 
-	err = os_read_file_k(from->thread.mode.tt.switch_pipe[0], &c,
+	err = os_read_file(from->thread.mode.tt.switch_pipe[0], &c,
 			     sizeof(c));
 	if(err != sizeof(c))
 		panic("read of switch_pipe failed, errno = %d", -err);
@@ -114,7 +114,7 @@
 	char c;
 
 	os_stop_process(os_getpid());
-	err = os_read_file_k(fd, &c, sizeof(c));
+	err = os_read_file(fd, &c, sizeof(c));
 	if(err != sizeof(c))
 		panic("read failed in suspend_new_thread, err = %d", -err);
 }
diff --git a/arch/um/kernel/tt/ptproxy/proxy.c b/arch/um/kernel/tt/ptproxy/proxy.c
index 007beb6..420c23f 100644
--- a/arch/um/kernel/tt/ptproxy/proxy.c
+++ b/arch/um/kernel/tt/ptproxy/proxy.c
@@ -338,14 +338,14 @@
 			       "err = %d\n", -fd);
 			exit(1);
 		}
-		os_write_file_k(fd, gdb_init_string,
-				sizeof(gdb_init_string) - 1);
+		os_write_file(fd, gdb_init_string,
+			      sizeof(gdb_init_string) - 1);
 		if(startup){
 			if(stop){
-				os_write_file_k(fd, "b start_kernel\n",
+				os_write_file(fd, "b start_kernel\n",
 						strlen("b start_kernel\n"));
 			}
-			os_write_file_k(fd, "c\n", strlen("c\n"));
+			os_write_file(fd, "c\n", strlen("c\n"));
 		}
 		if(ptrace(PTRACE_TRACEME, 0, 0, 0) < 0){
 			printk("start_debugger :  PTRACE_TRACEME failed, "
diff --git a/arch/um/kernel/tt/tracer.c b/arch/um/kernel/tt/tracer.c
index 264da6c..c235883 100644
--- a/arch/um/kernel/tt/tracer.c
+++ b/arch/um/kernel/tt/tracer.c
@@ -44,7 +44,7 @@
 	int n;
 	char c = 1;
 
-	n = os_write_file_k(tracer_winch[1], &c, sizeof(c));
+	n = os_write_file(tracer_winch[1], &c, sizeof(c));
 	if(n != sizeof(c))
 		printk("tracer_winch_handler - write failed, err = %d\n", -n);
 }
diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c
index 5e9b8dc..6f92f73 100644
--- a/arch/um/os-Linux/file.c
+++ b/arch/um/os-Linux/file.c
@@ -290,52 +290,8 @@
 	return 0;
 }
 
-static int fault_buffer(void *start, int len,
-			int (*copy_proc)(void *addr, void *buf, int len))
-{
-	int page = getpagesize(), i;
-	char c;
-
-	for(i = 0; i < len; i += page){
-		if((*copy_proc)(start + i, &c, sizeof(c)))
-			return -EFAULT;
-	}
-	if((len % page) != 0){
-		if((*copy_proc)(start + len - 1, &c, sizeof(c)))
-			return -EFAULT;
-	}
-	return 0;
-}
-
-static int file_io(int fd, void *buf, int len,
-		   int (*io_proc)(int fd, void *buf, int len),
-		   int (*copy_user_proc)(void *addr, void *buf, int len))
-{
-	int n, err;
-
-	do {
-		n = (*io_proc)(fd, buf, len);
-		if((n < 0) && (errno == EFAULT)){
-			err = fault_buffer(buf, len, copy_user_proc);
-			if(err)
-				return err;
-			n = (*io_proc)(fd, buf, len);
-		}
-	} while((n < 0) && (errno == EINTR));
-
-	if(n < 0)
-		return -errno;
-	return n;
-}
-
 int os_read_file(int fd, void *buf, int len)
 {
-	return file_io(fd, buf, len, (int (*)(int, void *, int)) read,
-		       copy_from_user_proc);
-}
-
-int os_read_file_k(int fd, void *buf, int len)
-{
 	int n = read(fd, buf, len);
 
 	if(n < 0)
@@ -345,12 +301,6 @@
 
 int os_write_file(int fd, const void *buf, int len)
 {
-	return file_io(fd, (void *) buf, len,
-		       (int (*)(int, void *, int)) write, copy_to_user_proc);
-}
-
-int os_write_file_k(int fd, const void *buf, int len)
-{
 	int n = write(fd, (void *) buf, len);
 
 	if(n < 0)
diff --git a/arch/um/sys-i386/bugs.c b/arch/um/sys-i386/bugs.c
index f5dfe49..0393e44 100644
--- a/arch/um/sys-i386/bugs.c
+++ b/arch/um/sys-i386/bugs.c
@@ -28,7 +28,7 @@
 	ptr = buf;
 	end = &buf[len];
 	do {
-		n = os_read_file_k(fd, ptr, sizeof(*ptr));
+		n = os_read_file(fd, ptr, sizeof(*ptr));
 		c = *ptr++;
 		if(n != sizeof(*ptr)){
 			if(n == 0)
@@ -67,7 +67,7 @@
 			return 1;
 
 		do {
-			n = os_read_file_k(fd, &c, sizeof(c));
+			n = os_read_file(fd, &c, sizeof(c));
 			if(n != sizeof(c)){
 				printk("Failed to find newline in "
 				       "/proc/cpuinfo, err = %d\n", -n);
diff --git a/arch/um/sys-i386/ldt.c b/arch/um/sys-i386/ldt.c
index d031a13..a939a7e 100644
--- a/arch/um/sys-i386/ldt.c
+++ b/arch/um/sys-i386/ldt.c
@@ -517,7 +517,7 @@
 					      .u 	=
 					      { .copy_segments =
 							from_mm->id.u.mm_fd } } );
-		i = os_write_file_k(new_mm->id.u.mm_fd, &copy, sizeof(copy));
+		i = os_write_file(new_mm->id.u.mm_fd, &copy, sizeof(copy));
 		if(i != sizeof(copy))
 			printk("new_mm : /proc/mm copy_segments failed, "
 			       "err = %d\n", -i);
