/* vfs_syscalls.c 4.11 81/08/12 */
register struct file
*fp
;
uap
= (struct a
*)u
.u_ap
;
stat1(fp
->f_inode
, uap
->sb
);
register struct inode
*ip
;
uap
= (struct a
*)u
.u_ap
;
* The basic routine for fstat and stat:
* get the inode and pass appropriate parts back.
register struct inode
*ip
;
register struct dinode
*dp
;
IUPDAT(ip
, &time
, &time
, 0);
* first copy from inode table
ds
.st_ino
= ip
->i_number
;
ds
.st_nlink
= ip
->i_nlink
;
ds
.st_rdev
= (dev_t
)ip
->i_un
.i_rdev
;
* next the dates in the disk
bp
= bread(ip
->i_dev
, itod(ip
->i_number
));
dp
+= itoo(ip
->i_number
);
ds
.st_atime
= dp
->di_atime
;
ds
.st_mtime
= dp
->di_mtime
;
ds
.st_ctime
= dp
->di_ctime
;
if (copyout((caddr_t
)&ds
, (caddr_t
)ub
, sizeof(ds
)) < 0)
register struct file
*fp
;
uap
= (struct a
*)u
.u_ap
;
register struct inode
*ip
;
register struct mount
*mp
;
register struct filsys
*fp
;
uap
= (struct a
*)u
.u_ap
;
u
.u_dirp
= (caddr_t
)uap
->freg
;
if(ip
->i_count
!=1 || (ip
->i_mode
&(IFBLK
&IFCHR
))!=0)
for(mp
= &mount
[0]; mp
< &mount
[NMOUNT
]; mp
++) {
(*bdevsw
[major(dev
)].d_open
)(dev
, !uap
->ronly
);
fp
->s_ronly
= uap
->ronly
& 1;
for (cp
= fp
->s_fsmnt
; cp
< &fp
->s_fsmnt
[sizeof (fp
->s_fsmnt
) - 1]; )
if ((*cp
++ = uchar()) == 0)
u
.u_dirp
--; /* get 0 again */
* the umount system call.
register struct inode
*ip
;
register struct mount
*mp
;
xumount(dev
); /* remove unused sticky files from text table */
for(mp
= &mount
[0]; mp
< &mount
[NMOUNT
]; mp
++)
if(mp
->m_bufp
!= NULL
&& dev
== mp
->m_dev
)
for(ip
= inode
; ip
< inodeNINODE
; ip
++)
if (ip
->i_number
!= 0 && dev
== ip
->i_dev
) {
} else if (ip
->i_number
!= 0 && (ip
->i_mode
&IFMT
) == IFBLK
&&
if ((bp
= getblk(dev
, SUPERB
)) != mp
->m_bufp
)
bp
->b_flags
&= ~B_LOCKED
;
flag
= !bp
->b_un
.b_filsys
->s_ronly
;
(*bdevsw
[major(dev
)].d_close
)(dev
, flag
);
* Common code for mount and umount.
* Check that the user's argument is a reasonable
* thing on which to mount, and return the device number if so.
register struct inode
*ip
;
if((ip
->i_mode
&IFMT
) != IFBLK
)
dev
= (dev_t
)ip
->i_un
.i_rdev
;
if(major(dev
) >= nblkdev
)