add type FS_SOCKET, change locking rules, it's now possible to use more then one mshell at the same time.

This commit is contained in:
Marian Ohligs 2011-11-01 20:11:52 +01:00
parent 242738a3b8
commit d90d962201
3 changed files with 21 additions and 10 deletions

View file

@ -116,7 +116,7 @@ int socket_init(vfs_node_t* node, const char* name)
return -ENOMEM;
memset(new_node, 0x00, sizeof(vfs_node_t));
new_node->type = FS_CHARDEVICE;
new_node->type = FS_SOCKET;
new_node->open = &socket_open;
new_node->close = &socket_close;
new_node->read = &socket_read;

22
fs/fs.c
View file

@ -34,11 +34,16 @@ ssize_t read_fs(fildes_t* file, uint8_t* buffer, size_t size)
if (BUILTIN_EXPECT(!node || !buffer, 0))
return ret;
spinlock_lock(&node->lock);
// Has the node got a read callback?
if (node->type != FS_SOCKET) {
spinlock_lock(&node->lock);
// Has the node got a read callback?
if (node->read != 0)
ret = node->read(file, buffer, size);
spinlock_unlock(&node->lock);
} else {
if (node->read != 0)
ret = node->read(file, buffer, size);
spinlock_unlock(&node->lock);
}
return ret;
}
@ -51,11 +56,16 @@ ssize_t write_fs(fildes_t* file, uint8_t* buffer, size_t size)
if (BUILTIN_EXPECT(!node || !buffer, 0))
return ret;
spinlock_lock(&node->lock);
// Has the node got a write callback?
if (node->type != FS_SOCKET) {
spinlock_lock(&node->lock);
// Has the node got a write callback?
if (node->write != 0)
ret = node->write(file, buffer, size);
spinlock_unlock(&node->lock);
} else {
if (node->write != 0)
ret = node->write(file, buffer, size);
spinlock_unlock(&node->lock);
}
return ret;
}

View file

@ -29,12 +29,13 @@
#include <metalsvm/stddef.h>
#include <metalsvm/spinlock_types.h>
#define FS_FILE 0x01
#define FS_DIRECTORY 0x02
#define FS_CHARDEVICE 0x03
#define FS_FILE 0x01
#define FS_DIRECTORY 0x02
#define FS_CHARDEVICE 0x03
//#define FS_BLOCKDEVICE 0x04
//#define FS_PIPE 0x05
//#define FS_SYMLINK 0x06
#define FS_SOCKET 0x06
//#define FS_MOUNTPOINT 0x08 // Is the file an active mountpoint?