e040f736d02bd282a2158142b479c3492efa7305
/* lfs_vnops.c 4.5 %G% */
register struct file
*fp
;
uap
= (struct a
*)u
.u_ap
;
stat1(fp
->f_inode
, uap
->sb
, fp
->f_flag
&FPIPE
? fp
->f_un
.f_offset
: 0);
register struct inode
*ip
;
uap
= (struct a
*)u
.u_ap
;
stat1(ip
, uap
->sb
, (off_t
)0);
* 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
;
ds
.st_size
= ip
->i_size
- pipeadj
;
* 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;
* 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
[0]; ip
< &inode
[NINODE
]; 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
)