This commit is contained in:
Philip Homburg 2007-08-10 13:02:39 +00:00
parent 06e1f0da61
commit 90fde6e97d
3 changed files with 88 additions and 201 deletions

View File

@ -102,24 +102,12 @@ mode_t *new_modep;
r = fs_sendrec(fs_e, &m);
/* Copy back actual mode. */
if (r == OK)
*new_modep = m.RES_MODE;
*new_modep = m.RES_MODE;
return r;
}
/* Structure for REQ_CHOWN request */
typedef struct chown_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
uid_t newuid;
gid_t newgid;
} chown_req_t;
/*===========================================================================*
* req_chown *
*===========================================================================*/
@ -471,74 +459,6 @@ mode_t dmode;
}
/* Structure for REQ_MKNOD request */
typedef struct mknod_req {
int fs_e;
ino_t inode_nr;
uid_t uid;
gid_t gid;
mode_t rmode;
dev_t dev;
char *lastc;
} mknod_req_t;
/*===========================================================================*
* req_newnode *
*===========================================================================*/
PUBLIC int req_newnode(fs_e, uid, gid, dmode, dev, res)
endpoint_t fs_e;
uid_t uid;
gid_t gid;
mode_t dmode;
dev_t dev;
struct node_details *res;
{
int r;
message m;
/* Fill in request message */
m.m_type = REQ_NEWNODE;
m.REQ_MODE = dmode;
m.REQ_DEVx = dev;
m.REQ_UID = uid;
m.REQ_GID = gid;
/* Send/rec request */
r = fs_sendrec(fs_e, &m);
res->fs_e = m.m_source;
res->inode_nr = m.RES_INODE_NR;
res->fmode = m.RES_MODE;
res->fsize = m.RES_FILE_SIZE;
res->dev = m.RES_DEV;
res->uid= m.RES_UID;
res->gid= m.RES_GID;
return r;
}
/*===========================================================================*
* req_mountpoint *
*===========================================================================*/
PUBLIC int req_mountpoint(fs_e, inode_nr)
endpoint_t fs_e;
ino_t inode_nr;
{
int r;
message m;
/* Fill in request message */
m.m_type = REQ_MOUNTPOINT_S;
m.REQ_INODE_NR = inode_nr;
/* Send/rec request */
return fs_sendrec(fs_e, &m);
}
/*===========================================================================*
* req_mknod *
*===========================================================================*/
@ -580,6 +500,93 @@ dev_t dev;
}
/*===========================================================================*
* req_mountpoint *
*===========================================================================*/
PUBLIC int req_mountpoint(fs_e, inode_nr)
endpoint_t fs_e;
ino_t inode_nr;
{
int r;
message m;
/* Fill in request message */
m.m_type = REQ_MOUNTPOINT_S;
m.REQ_INODE_NR = inode_nr;
/* Send/rec request */
return fs_sendrec(fs_e, &m);
}
/*===========================================================================*
* req_newnode *
*===========================================================================*/
PUBLIC int req_newnode(fs_e, uid, gid, dmode, dev, res)
endpoint_t fs_e;
uid_t uid;
gid_t gid;
mode_t dmode;
dev_t dev;
struct node_details *res;
{
int r;
message m;
/* Fill in request message */
m.m_type = REQ_NEWNODE;
m.REQ_MODE = dmode;
m.REQ_DEVx = dev;
m.REQ_UID = uid;
m.REQ_GID = gid;
/* Send/rec request */
r = fs_sendrec(fs_e, &m);
res->fs_e = m.m_source;
res->inode_nr = m.RES_INODE_NR;
res->fmode = m.RES_MODE;
res->fsize = m.RES_FILE_SIZE;
res->dev = m.RES_DEV;
res->uid= m.RES_UID;
res->gid= m.RES_GID;
return r;
}
/*===========================================================================*
* req_newdriver *
*===========================================================================*/
PUBLIC int req_newdriver(fs_e, dev, driver_e)
endpoint_t fs_e;
Dev_t dev;
endpoint_t driver_e;
{
/* Note: this is the only request function that doesn't use the
* fs_sendrec internal routine, since we want to avoid the dead
* driver recovery mechanism here. This function is actually called
* during the recovery.
*/
message m;
int r;
/* Fill in request message */
m.m_type = REQ_NEW_DRIVER;
m.REQ_DEV = dev;
m.REQ_DRIVER_E = driver_e;
/* Issue request */
if ((r = sendrec(fs_e, &m)) != OK) {
printf("VFSreq_newdriver: error sending message to %d: %d\n", fs_e, r);
return r;
}
return OK;
}
/*===========================================================================*
* req_putnode *
*===========================================================================*/
@ -676,19 +683,6 @@ struct node_details *res_nodep;
return OK;
}
/* Structure for REQ_READ and REQ_WRITE request */
typedef struct readwrite_req {
int rw_flag;
endpoint_t fs_e;
endpoint_t user_e;
ino_t inode_nr;
unsigned short inode_index;
int seg;
u64_t pos;
unsigned int num_of_bytes;
char *user_addr;
} readwrite_req_t;
/*===========================================================================*
* req_readwrite *
@ -936,16 +930,6 @@ endpoint_t fs_e;
return fs_sendrec(fs_e, &m);
}
/* Structure for REQ_UNLINK request */
typedef struct unlink_req {
int fs_e;
ino_t d_inode_nr;
uid_t uid;
gid_t gid;
char *lastc;
} unlink_req_t;
/*===========================================================================*
* req_unlink *
@ -1018,38 +1002,6 @@ time_t modtime;
}
/*===========================================================================*
* req_newdriver *
*===========================================================================*/
PUBLIC int req_newdriver(fs_e, dev, driver_e)
endpoint_t fs_e;
Dev_t dev;
endpoint_t driver_e;
{
/* Note: this is the only request function that doesn't use the
* fs_sendrec internal routine, since we want to avoid the dead
* driver recovery mechanism here. This function is actually called
* during the recovery.
*/
message m;
int r;
/* Fill in request message */
m.m_type = REQ_NEW_DRIVER;
m.REQ_DEV = dev;
m.REQ_DRIVER_E = driver_e;
/* Issue request */
if ((r = sendrec(fs_e, &m)) != OK) {
printf("VFSreq_newdriver: error sending message to %d: %d\n", fs_e, r);
return r;
}
return OK;
}
/*===========================================================================*

View File

@ -6,7 +6,6 @@
#include <sys/types.h>
/* Structure for response that contains inode details */
typedef struct node_details {
endpoint_t fs_e;
@ -23,64 +22,6 @@ typedef struct node_details {
dev_t dev;
} node_details_t;
/* Structure for REQ_OPEN request */
typedef struct open_req {
endpoint_t fs_e;
ino_t inode_nr;
char *lastc;
int oflags;
mode_t omode;
uid_t uid;
gid_t gid;
} open_req_t;
/* Structure for REQ_CLONE_OPCL request */
typedef struct clone_opcl_req {
int fs_e;
dev_t dev;
} clone_opcl_req_t;
/* Structure for REQ_READSUPER request */
typedef struct readsuper_req {
endpoint_t fs_e;
time_t boottime;
endpoint_t driver_e;
dev_t dev;
char *slink_storage;
char isroot;
char readonly;
} readsuper_req_t;
/* Structure for response of READSUPER request */
typedef struct readsuper_res {
endpoint_t fs_e;
ino_t inode_nr;
mode_t fmode;
off_t fsize;
int blocksize;
off_t maxsize;
} readsuper_res_t;
/* Structure for REQ_LOOKUP request */
typedef struct lookup_req {
/* Fields filled in by the caller */
char *path;
char *lastc;
int flags;
/* Fields filled in by the path name traversal method */
endpoint_t fs_e;
ino_t start_dir;
ino_t root_dir; /* process' root directory */
uid_t uid;
gid_t gid;
unsigned char symloop;
} lookup_req_t;
/* Structure for a lookup response */
typedef struct lookup_res {
endpoint_t fs_e;

View File

@ -242,17 +242,11 @@ PUBLIC int do_fstatfs()
PUBLIC int do_lstat()
{
/* Perform the lstat(name, buf) system call. */
struct lookup_req lookup_req;
struct vnode *vp;
int r;
if (fetch_name(m_in.name1, m_in.name1_length, M1) != OK) return(err_code);
/* Fill in lookup request fields */
lookup_req.path = user_fullpath;
lookup_req.lastc = NULL;
lookup_req.flags = EAT_PATH_OPAQUE;
/* Request lookup */
if ((r = lookup_vp(PATH_RET_SYMLINK, 0 /*!use_realuid*/, &vp)) != OK)
return r;