Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
[pandora-kernel.git] / arch / um / os-Linux / drivers / ethertap_user.c
index 2cc2d3e..acba301 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and 
+ * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) and
  * James Leu (jleu@mindspring.net).
  * Copyright (C) 2001 by various other people who didn't put their name here.
  * Licensed under the GPL.
 #include <net/if.h>
 #include "user.h"
 #include "kern_util.h"
-#include "user_util.h"
 #include "net_user.h"
 #include "etap.h"
 #include "os.h"
 #include "um_malloc.h"
+#include "kern_constants.h"
 
 #define MAX_PACKET ETH_MAX_PACKET
 
@@ -48,13 +48,16 @@ static void etap_change(int op, unsigned char *addr, unsigned char *netmask,
        change.what = op;
        memcpy(change.addr, addr, sizeof(change.addr));
        memcpy(change.netmask, netmask, sizeof(change.netmask));
-       n = os_write_file(fd, &change, sizeof(change));
-       if(n != sizeof(change))
-               printk("etap_change - request failed, err = %d\n", -n);
-       output = um_kmalloc(page_size());
+       CATCH_EINTR(n = write(fd, &change, sizeof(change)));
+       if(n != sizeof(change)){
+               printk("etap_change - request failed, err = %d\n", errno);
+               return;
+       }
+
+       output = um_kmalloc(UM_KERN_PAGE_SIZE);
        if(output == NULL)
                printk("etap_change : Failed to allocate output buffer\n");
-       read_output(fd, output, page_size());
+       read_output(fd, output, UM_KERN_PAGE_SIZE);
        if(output != NULL){
                printk("%s", output);
                kfree(output);
@@ -116,13 +119,15 @@ static int etap_tramp(char *dev, char *gate, int control_me,
        pe_data.data_me = data_me;
        pid = run_helper(etap_pre_exec, &pe_data, args, NULL);
 
-       if(pid < 0) err = pid;
+       if(pid < 0)
+               err = pid;
        os_close_file(data_remote);
        os_close_file(control_remote);
-       n = os_read_file(control_me, &c, sizeof(c));
+       CATCH_EINTR(n = read(control_me, &c, sizeof(c)));
        if(n != sizeof(c)){
-               printk("etap_tramp : read of status failed, err = %d\n", -n);
-               return -EINVAL;
+               err = -errno;
+               printk("etap_tramp : read of status failed, err = %d\n", -err);
+               return err;
        }
        if(c != 1){
                printk("etap_tramp : uml_net failed\n");
@@ -160,7 +165,7 @@ static int etap_open(void *data)
 
        err = etap_tramp(pri->dev_name, pri->gate_addr, control_fds[0], 
                         control_fds[1], data_fds[0], data_fds[1]);
-       output_len = page_size();
+       output_len = UM_KERN_PAGE_SIZE;
        output = um_kmalloc(output_len);
        read_output(control_fds[0], output, output_len);