aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um
diff options
context:
space:
mode:
Diffstat (limited to 'arch/um')
-rw-r--r--arch/um/drivers/ubd_kern.c7
-rw-r--r--arch/um/include/shared/os.h3
-rw-r--r--arch/um/kernel/ksyms.c3
-rw-r--r--arch/um/os-Linux/file.c15
-rw-r--r--arch/um/os-Linux/user_syms.c4
5 files changed, 31 insertions, 1 deletions
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index da992a3ad6b7..1bcd208c459f 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -33,6 +33,7 @@
33#include "linux/mm.h" 33#include "linux/mm.h"
34#include "linux/slab.h" 34#include "linux/slab.h"
35#include "linux/vmalloc.h" 35#include "linux/vmalloc.h"
36#include "linux/smp_lock.h"
36#include "linux/blkpg.h" 37#include "linux/blkpg.h"
37#include "linux/genhd.h" 38#include "linux/genhd.h"
38#include "linux/spinlock.h" 39#include "linux/spinlock.h"
@@ -1098,6 +1099,7 @@ static int ubd_open(struct block_device *bdev, fmode_t mode)
1098 struct ubd *ubd_dev = disk->private_data; 1099 struct ubd *ubd_dev = disk->private_data;
1099 int err = 0; 1100 int err = 0;
1100 1101
1102 lock_kernel();
1101 if(ubd_dev->count == 0){ 1103 if(ubd_dev->count == 0){
1102 err = ubd_open_dev(ubd_dev); 1104 err = ubd_open_dev(ubd_dev);
1103 if(err){ 1105 if(err){
@@ -1115,7 +1117,8 @@ static int ubd_open(struct block_device *bdev, fmode_t mode)
1115 if(--ubd_dev->count == 0) ubd_close_dev(ubd_dev); 1117 if(--ubd_dev->count == 0) ubd_close_dev(ubd_dev);
1116 err = -EROFS; 1118 err = -EROFS;
1117 }*/ 1119 }*/
1118 out: 1120out:
1121 unlock_kernel();
1119 return err; 1122 return err;
1120} 1123}
1121 1124
@@ -1123,8 +1126,10 @@ static int ubd_release(struct gendisk *disk, fmode_t mode)
1123{ 1126{
1124 struct ubd *ubd_dev = disk->private_data; 1127 struct ubd *ubd_dev = disk->private_data;
1125 1128
1129 lock_kernel();
1126 if(--ubd_dev->count == 0) 1130 if(--ubd_dev->count == 0)
1127 ubd_close_dev(ubd_dev); 1131 ubd_close_dev(ubd_dev);
1132 unlock_kernel();
1128 return 0; 1133 return 0;
1129} 1134}
1130 1135
diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h
index cd40fddcf99d..c4617baaa4f2 100644
--- a/arch/um/include/shared/os.h
+++ b/arch/um/include/shared/os.h
@@ -161,6 +161,9 @@ extern int os_stat_filesystem(char *path, long *bsize_out,
161 long *spare_out); 161 long *spare_out);
162extern int os_change_dir(char *dir); 162extern int os_change_dir(char *dir);
163extern int os_fchange_dir(int fd); 163extern int os_fchange_dir(int fd);
164extern unsigned os_major(unsigned long long dev);
165extern unsigned os_minor(unsigned long long dev);
166extern unsigned long long os_makedev(unsigned major, unsigned minor);
164 167
165/* start_up.c */ 168/* start_up.c */
166extern void os_early_checks(void); 169extern void os_early_checks(void);
diff --git a/arch/um/kernel/ksyms.c b/arch/um/kernel/ksyms.c
index 836fc9b94707..0ae0dfcfbffb 100644
--- a/arch/um/kernel/ksyms.c
+++ b/arch/um/kernel/ksyms.c
@@ -58,6 +58,9 @@ EXPORT_SYMBOL(os_accept_connection);
58EXPORT_SYMBOL(os_rcv_fd); 58EXPORT_SYMBOL(os_rcv_fd);
59EXPORT_SYMBOL(run_helper); 59EXPORT_SYMBOL(run_helper);
60EXPORT_SYMBOL(start_thread); 60EXPORT_SYMBOL(start_thread);
61EXPORT_SYMBOL(os_major);
62EXPORT_SYMBOL(os_minor);
63EXPORT_SYMBOL(os_makedev);
61 64
62EXPORT_SYMBOL(add_sigio_fd); 65EXPORT_SYMBOL(add_sigio_fd);
63EXPORT_SYMBOL(ignore_sigio_fd); 66EXPORT_SYMBOL(ignore_sigio_fd);
diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c
index b5afcfd0f861..140e587bc0ad 100644
--- a/arch/um/os-Linux/file.c
+++ b/arch/um/os-Linux/file.c
@@ -561,3 +561,18 @@ int os_lock_file(int fd, int excl)
561 out: 561 out:
562 return err; 562 return err;
563} 563}
564
565unsigned os_major(unsigned long long dev)
566{
567 return major(dev);
568}
569
570unsigned os_minor(unsigned long long dev)
571{
572 return minor(dev);
573}
574
575unsigned long long os_makedev(unsigned major, unsigned minor)
576{
577 return makedev(major, minor);
578}
diff --git a/arch/um/os-Linux/user_syms.c b/arch/um/os-Linux/user_syms.c
index 89b48a116a89..05f5ea8e83d2 100644
--- a/arch/um/os-Linux/user_syms.c
+++ b/arch/um/os-Linux/user_syms.c
@@ -103,6 +103,10 @@ EXPORT_SYMBOL_PROTO(getuid);
103EXPORT_SYMBOL_PROTO(fsync); 103EXPORT_SYMBOL_PROTO(fsync);
104EXPORT_SYMBOL_PROTO(fdatasync); 104EXPORT_SYMBOL_PROTO(fdatasync);
105 105
106EXPORT_SYMBOL_PROTO(lstat64);
107EXPORT_SYMBOL_PROTO(fstat64);
108EXPORT_SYMBOL_PROTO(mknod);
109
106/* Export symbols used by GCC for the stack protector. */ 110/* Export symbols used by GCC for the stack protector. */
107extern void __stack_smash_handler(void *) __attribute__((weak)); 111extern void __stack_smash_handler(void *) __attribute__((weak));
108EXPORT_SYMBOL(__stack_smash_handler); 112EXPORT_SYMBOL(__stack_smash_handler);