include, vfs: statvfs, fstatvfs calls, contributed by Buccapatnam Tirumala, Gautam.
This commit is contained in:
parent
45e4cce8c2
commit
fc01683584
7 changed files with 78 additions and 3 deletions
|
@ -73,6 +73,8 @@
|
||||||
#define GETDENTS 80 /* to FS */
|
#define GETDENTS 80 /* to FS */
|
||||||
#define LLSEEK 81 /* to VFS */
|
#define LLSEEK 81 /* to VFS */
|
||||||
#define FSTATFS 82 /* to VFS */
|
#define FSTATFS 82 /* to VFS */
|
||||||
|
#define STATVFS 83 /* to VFS */
|
||||||
|
#define FSTATVFS 84 /* to VFS */
|
||||||
#define SELECT 85 /* to VFS */
|
#define SELECT 85 /* to VFS */
|
||||||
#define FCHDIR 86 /* to VFS */
|
#define FCHDIR 86 /* to VFS */
|
||||||
#define FSYNC 87 /* to VFS */
|
#define FSYNC 87 /* to VFS */
|
||||||
|
|
|
@ -245,6 +245,14 @@
|
||||||
#define TAPE_STAT0 m2_l1
|
#define TAPE_STAT0 m2_l1
|
||||||
#define TAPE_STAT1 m2_l2
|
#define TAPE_STAT1 m2_l2
|
||||||
|
|
||||||
|
/* Field names for the fstatvfs call */
|
||||||
|
#define FSTATVFS_FD m1_i1
|
||||||
|
#define FSTATVFS_BUF m1_p1
|
||||||
|
|
||||||
|
/* Field names for the statvfs call */
|
||||||
|
#define STATVFS_LEN m1_i1
|
||||||
|
#define STATVFS_NAME m1_p1
|
||||||
|
#define STATVFS_BUF m1_p2
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* Messages for networking layer *
|
* Messages for networking layer *
|
||||||
*===========================================================================*/
|
*===========================================================================*/
|
||||||
|
|
|
@ -113,8 +113,9 @@ typedef struct {
|
||||||
#define REQ_NEWNODE (VFS_BASE + 29)
|
#define REQ_NEWNODE (VFS_BASE + 29)
|
||||||
#define REQ_RDLINK (VFS_BASE + 30)
|
#define REQ_RDLINK (VFS_BASE + 30)
|
||||||
#define REQ_GETDENTS (VFS_BASE + 31)
|
#define REQ_GETDENTS (VFS_BASE + 31)
|
||||||
|
#define REQ_STATVFS (VFS_BASE + 32)
|
||||||
|
|
||||||
#define NREQS 32
|
#define NREQS 33
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,7 @@ _PROTOTYPE( int req_create, (int fs_e, ino_t inode_nr, int omode,
|
||||||
uid_t uid, gid_t gid, char *path, node_details_t *res) );
|
uid_t uid, gid_t gid, char *path, node_details_t *res) );
|
||||||
_PROTOTYPE( int req_flush, (endpoint_t fs_e, dev_t dev) );
|
_PROTOTYPE( int req_flush, (endpoint_t fs_e, dev_t dev) );
|
||||||
_PROTOTYPE( int req_fstatfs, (int fs_e, int who_e, char *buf) );
|
_PROTOTYPE( int req_fstatfs, (int fs_e, int who_e, char *buf) );
|
||||||
|
_PROTOTYPE( int req_statvfs, (int fs_e, int who_e, char *buf) );
|
||||||
_PROTOTYPE( int req_ftrunc, (endpoint_t fs_e, ino_t inode_nr,
|
_PROTOTYPE( int req_ftrunc, (endpoint_t fs_e, ino_t inode_nr,
|
||||||
off_t start, off_t end) );
|
off_t start, off_t end) );
|
||||||
_PROTOTYPE( int req_getdents, (endpoint_t fs_e, ino_t inode_nr, u64_t pos,
|
_PROTOTYPE( int req_getdents, (endpoint_t fs_e, ino_t inode_nr, u64_t pos,
|
||||||
|
@ -220,6 +221,8 @@ _PROTOTYPE( int do_chroot, (void) );
|
||||||
_PROTOTYPE( int do_fstat, (void) );
|
_PROTOTYPE( int do_fstat, (void) );
|
||||||
_PROTOTYPE( int do_stat, (void) );
|
_PROTOTYPE( int do_stat, (void) );
|
||||||
_PROTOTYPE( int do_fstatfs, (void) );
|
_PROTOTYPE( int do_fstatfs, (void) );
|
||||||
|
_PROTOTYPE( int do_statvfs, (void) );
|
||||||
|
_PROTOTYPE( int do_fstatvfs, (void) );
|
||||||
_PROTOTYPE( int do_rdlink, (void) );
|
_PROTOTYPE( int do_rdlink, (void) );
|
||||||
_PROTOTYPE( int do_lstat, (void) );
|
_PROTOTYPE( int do_lstat, (void) );
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/statfs.h>
|
#include <sys/statfs.h>
|
||||||
|
#include <sys/statvfs.h>
|
||||||
#include <minix/vfsif.h>
|
#include <minix/vfsif.h>
|
||||||
#include <minix/com.h>
|
#include <minix/com.h>
|
||||||
#include <minix/const.h>
|
#include <minix/const.h>
|
||||||
|
@ -227,6 +228,32 @@ PUBLIC int req_fstatfs(int fs_e, int who_e, char *buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*===========================================================================*
|
||||||
|
* req_statvfs *
|
||||||
|
*===========================================================================*/
|
||||||
|
PUBLIC int req_statvfs(int fs_e, int who_e, char *buf)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
cp_grant_id_t grant_id;
|
||||||
|
message m;
|
||||||
|
|
||||||
|
grant_id = cpf_grant_magic(fs_e, who_e, (vir_bytes) buf, sizeof(struct statvfs),
|
||||||
|
CPF_WRITE);
|
||||||
|
if(grant_id == -1)
|
||||||
|
panic("req_statvfs: cpf_grant_magic failed");
|
||||||
|
|
||||||
|
/* Fill in request message */
|
||||||
|
m.m_type = REQ_STATVFS;
|
||||||
|
m.REQ_GRANT = grant_id;
|
||||||
|
|
||||||
|
/* Send/rec request */
|
||||||
|
r = fs_sendrec(fs_e, &m);
|
||||||
|
cpf_revoke(grant_id);
|
||||||
|
|
||||||
|
return(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* req_ftrunc *
|
* req_ftrunc *
|
||||||
*===========================================================================*/
|
*===========================================================================*/
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
* do_stat: perform the STAT system call
|
* do_stat: perform the STAT system call
|
||||||
* do_fstat: perform the FSTAT system call
|
* do_fstat: perform the FSTAT system call
|
||||||
* do_fstatfs: perform the FSTATFS system call
|
* do_fstatfs: perform the FSTATFS system call
|
||||||
|
* do_statvfs: perform the STATVFS system call
|
||||||
|
* do_fstatvfs: perform the FSTATVFS system call
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
|
@ -169,6 +171,38 @@ PUBLIC int do_fstatfs()
|
||||||
return req_fstatfs(rfilp->filp_vno->v_fs_e, who_e, m_in.buffer);
|
return req_fstatfs(rfilp->filp_vno->v_fs_e, who_e, m_in.buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*===========================================================================*
|
||||||
|
* do_statvfs *
|
||||||
|
*===========================================================================*/
|
||||||
|
PUBLIC int do_statvfs()
|
||||||
|
{
|
||||||
|
/* Perform the stat(name, buf) system call. */
|
||||||
|
int r;
|
||||||
|
struct vnode *vp;
|
||||||
|
|
||||||
|
if (fetch_name(m_in.STATVFS_NAME, m_in.STATVFS_LEN, M1) != OK) return(err_code);
|
||||||
|
if ((vp = eat_path(PATH_NOFLAGS)) == NULL) return(err_code);
|
||||||
|
r = req_statvfs(vp->v_fs_e, who_e, m_in.STATVFS_BUF);
|
||||||
|
|
||||||
|
put_vnode(vp);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*===========================================================================*
|
||||||
|
* do_fstatvfs *
|
||||||
|
*===========================================================================*/
|
||||||
|
PUBLIC int do_fstatvfs()
|
||||||
|
{
|
||||||
|
/* Perform the fstat(fd, buf) system call. */
|
||||||
|
register struct filp *rfilp;
|
||||||
|
|
||||||
|
/* Is the file descriptor valid? */
|
||||||
|
if ((rfilp = get_filp(m_in.FSTATVFS_FD)) == NULL) return(err_code);
|
||||||
|
|
||||||
|
return req_statvfs(rfilp->filp_vno->v_fs_e, who_e, m_in.FSTATVFS_BUF);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* do_lstat *
|
* do_lstat *
|
||||||
|
|
|
@ -98,8 +98,8 @@ PUBLIC _PROTOTYPE (int (*call_vec[]), (void) ) = {
|
||||||
do_getdents, /* 80 = getdents */
|
do_getdents, /* 80 = getdents */
|
||||||
do_llseek, /* 81 = llseek */
|
do_llseek, /* 81 = llseek */
|
||||||
do_fstatfs, /* 82 = fstatfs */
|
do_fstatfs, /* 82 = fstatfs */
|
||||||
no_sys, /* 83 = unused */
|
do_statvfs, /* 83 = fstatvfs */
|
||||||
no_sys, /* 84 = unused */
|
do_fstatvfs, /* 84 = statvfs */
|
||||||
do_select, /* 85 = select */
|
do_select, /* 85 = select */
|
||||||
do_fchdir, /* 86 = fchdir */
|
do_fchdir, /* 86 = fchdir */
|
||||||
do_fsync, /* 87 = fsync */
|
do_fsync, /* 87 = fsync */
|
||||||
|
|
Loading…
Reference in a new issue