示例#1
0
文件: stadir.c 项目: tizzybec/minix
/*===========================================================================*
 *				do_statvfs				     *
 *===========================================================================*/
int do_statvfs()
{
/* Perform the stat(name, buf) system call. */
  int r;
  struct vnode *vp;
  struct vmnt *vmp;
  char fullpath[PATH_MAX];
  struct lookup resolve;
  vir_bytes vname1, statbuf;
  size_t vname1_length;

  vname1 = (vir_bytes) job_m_in.name1;
  vname1_length = (size_t) job_m_in.name1_length;
  statbuf = (vir_bytes) job_m_in.name2;

  lookup_init(&resolve, fullpath, PATH_NOFLAGS, &vmp, &vp);
  resolve.l_vmnt_lock = VMNT_READ;
  resolve.l_vnode_lock = VNODE_READ;

  if (fetch_name(vname1, vname1_length, fullpath) != OK) return(err_code);
  if ((vp = eat_path(&resolve, fp)) == NULL) return(err_code);
  r = req_statvfs(vp->v_fs_e, who_e, statbuf);

  unlock_vnode(vp);
  unlock_vmnt(vmp);

  put_vnode(vp);
  return r;
}
示例#2
0
文件: stadir.c 项目: vjanandr/inode-2
/*===========================================================================*
 *				update_statvfs				     *
 *===========================================================================*/
int update_statvfs(struct vmnt *vmp, struct statvfs *buf)
{
/* Get statistics from a file system, and cache part of the results. */
  int r;

  if ((r = req_statvfs(vmp->m_fs_e, buf)) != OK)
	return r;

  vmp->m_stats.f_flag = buf->f_flag;
  vmp->m_stats.f_bsize = buf->f_bsize;
  vmp->m_stats.f_frsize = buf->f_frsize;
  vmp->m_stats.f_iosize = buf->f_iosize;

  vmp->m_stats.f_blocks = buf->f_blocks;
  vmp->m_stats.f_bfree = buf->f_bfree;
  vmp->m_stats.f_bavail = buf->f_bavail;
  vmp->m_stats.f_bresvd = buf->f_bresvd;

  vmp->m_stats.f_files = buf->f_files;
  vmp->m_stats.f_ffree = buf->f_ffree;
  vmp->m_stats.f_favail = buf->f_favail;
  vmp->m_stats.f_fresvd = buf->f_fresvd;

  vmp->m_stats.f_syncreads = buf->f_syncreads;
  vmp->m_stats.f_syncwrites = buf->f_syncwrites;

  vmp->m_stats.f_asyncreads = buf->f_asyncreads;
  vmp->m_stats.f_asyncwrites = buf->f_asyncwrites;

  vmp->m_stats.f_namemax = buf->f_namemax;

  return OK;
}
示例#3
0
文件: stadir.c 项目: tizzybec/minix
/*===========================================================================*
 *				do_fstatvfs				     *
 *===========================================================================*/
int do_fstatvfs()
{
/* Perform the fstat(fd, buf) system call. */
  register struct filp *rfilp;
  int r, rfd;
  vir_bytes statbuf;

  rfd = job_m_in.fd;
  statbuf = (vir_bytes) job_m_in.name2;

  /* Is the file descriptor valid? */
  if ((rfilp = get_filp(rfd, VNODE_READ)) == NULL) return(err_code);
  r = req_statvfs(rfilp->filp_vno->v_fs_e, who_e, statbuf);

  unlock_filp(rfilp);

  return(r);
}