HGFS tweaks
This commit is contained in:
parent
6959226707
commit
564e2a4368
6 changed files with 9 additions and 8 deletions
|
@ -2,7 +2,6 @@
|
||||||
/* Number of inodes. */
|
/* Number of inodes. */
|
||||||
/* The following number must not exceed 16. The i_num field is only a short. */
|
/* The following number must not exceed 16. The i_num field is only a short. */
|
||||||
#define NUM_INODE_BITS 8
|
#define NUM_INODE_BITS 8
|
||||||
#define NUM_INODES ((1 << NUM_INODE_BITS) - 1)
|
|
||||||
|
|
||||||
/* Number of entries in the name hashtable. */
|
/* Number of entries in the name hashtable. */
|
||||||
#define NUM_HASH_SLOTS 1023
|
#define NUM_HASH_SLOTS 1023
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
|
|
||||||
#include "inc.h"
|
#include "inc.h"
|
||||||
|
|
||||||
|
PRIVATE struct inode inodes[NUM_INODES];
|
||||||
|
|
||||||
PRIVATE TAILQ_HEAD(free_head, inode) free_list;
|
PRIVATE TAILQ_HEAD(free_head, inode) free_list;
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
|
@ -32,7 +34,7 @@ PUBLIC struct inode *init_inode()
|
||||||
|
|
||||||
TAILQ_INIT(&free_list);
|
TAILQ_INIT(&free_list);
|
||||||
|
|
||||||
dprintf(("HGFS: %d inodes, %d bytes each, equals %d bytes\n",
|
dprintf(("HGFS: %d inodes, %u bytes each, equals %u bytes\n",
|
||||||
NUM_INODES, sizeof(struct inode), sizeof(inodes)));
|
NUM_INODES, sizeof(struct inode), sizeof(inodes)));
|
||||||
|
|
||||||
/* Mark all inodes except the root inode as free. */
|
/* Mark all inodes except the root inode as free. */
|
||||||
|
@ -69,7 +71,7 @@ ino_t ino_nr;
|
||||||
/* Get an inode based on its inode number. Do not increase its reference count.
|
/* Get an inode based on its inode number. Do not increase its reference count.
|
||||||
*/
|
*/
|
||||||
struct inode *ino;
|
struct inode *ino;
|
||||||
unsigned int index;
|
int index;
|
||||||
|
|
||||||
/* Inode 0 (= index -1) is not a valid inode number. */
|
/* Inode 0 (= index -1) is not a valid inode number. */
|
||||||
index = INODE_INDEX(ino_nr);
|
index = INODE_INDEX(ino_nr);
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
* - A CACHED or FREE inode may be reused for other purposes at any time.
|
* - A CACHED or FREE inode may be reused for other purposes at any time.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
EXTERN struct inode {
|
struct inode {
|
||||||
struct inode *i_parent; /* parent inode pointer */
|
struct inode *i_parent; /* parent inode pointer */
|
||||||
LIST_HEAD(child_head, inode) i_child; /* child inode anchor */
|
LIST_HEAD(child_head, inode) i_child; /* child inode anchor */
|
||||||
LIST_ENTRY(inode) i_next; /* sibling inode chain entry */
|
LIST_ENTRY(inode) i_next; /* sibling inode chain entry */
|
||||||
|
@ -66,7 +66,7 @@ EXTERN struct inode {
|
||||||
hgfs_dir_t u_dir; /* handle to open HGFS directory */
|
hgfs_dir_t u_dir; /* handle to open HGFS directory */
|
||||||
} i_u;
|
} i_u;
|
||||||
char i_name[NAME_MAX+1]; /* entry name in parent directory */
|
char i_name[NAME_MAX+1]; /* entry name in parent directory */
|
||||||
} inodes[NUM_INODES];
|
};
|
||||||
|
|
||||||
#define i_free i_u.u_free
|
#define i_free i_u.u_free
|
||||||
#define i_file i_u.u_file
|
#define i_file i_u.u_file
|
||||||
|
|
|
@ -315,7 +315,7 @@ PUBLIC int do_lookup()
|
||||||
assert(r != EENTERMOUNT && r != ESYMLINK);
|
assert(r != EENTERMOUNT && r != ESYMLINK);
|
||||||
|
|
||||||
if (r == ELEAVEMOUNT) {
|
if (r == ELEAVEMOUNT) {
|
||||||
m_out.RES_OFFSET = (int)(last - buf);
|
m_out.RES_OFFSET = (int) (last - buf);
|
||||||
m_out.RES_SYMLOOP = 0;
|
m_out.RES_SYMLOOP = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ PUBLIC int do_readsuper()
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
dprintf(("HGFS: readsuper (dev %x, flags %x)\n",
|
dprintf(("HGFS: readsuper (dev %x, flags %x)\n",
|
||||||
m_in.REQ_DEV, m_in.REQ_FLAGS));
|
(dev_t) m_in.REQ_DEV, m_in.REQ_FLAGS));
|
||||||
|
|
||||||
if (m_in.REQ_FLAGS & REQ_ISROOT) {
|
if (m_in.REQ_FLAGS & REQ_ISROOT) {
|
||||||
printf("HGFS: attempt to mount as root device\n");
|
printf("HGFS: attempt to mount as root device\n");
|
||||||
|
|
|
@ -101,7 +101,7 @@ PUBLIC int do_write()
|
||||||
count = m_in.REQ_NBYTES;
|
count = m_in.REQ_NBYTES;
|
||||||
grant = m_in.REQ_GRANT;
|
grant = m_in.REQ_GRANT;
|
||||||
|
|
||||||
if (count <= 0) return EINVAL;
|
if (count == 0) return EINVAL;
|
||||||
|
|
||||||
if ((r = write_file(ino, &pos, &count, &grant)) != OK)
|
if ((r = write_file(ino, &pos, &count, &grant)) != OK)
|
||||||
return r;
|
return r;
|
||||||
|
|
Loading…
Reference in a new issue