*/
struct incore_inode {
LIST_ENTRY(incore_inode) ici_link; /* i-nodes list link */
- unsigned ici_revalidate : 1; /* synch sys inode? */
struct intnl_stat ici_st; /* attrs */
struct file_identifier ici_fileid; /* file ID */
void *ici_data; /* file data */
#define _sysio_incore_dirop_symlink \
(int (*)(struct pnode *, const char *))_sysio_do_enosys
#define _sysio_incore_dirop_readlink \
- (int (*)(struct pnode *, char *, size_t))_sysio_do_einval
+ (int (*)(struct pnode *, char *, size_t))_sysio_do_enosys
#define _sysio_incore_dirop_read \
(int (*)(struct inode *, \
struct ioctx *))_sysio_do_eisdir
icino = malloc(sizeof(struct incore_inode));
if (!icino)
return NULL;
- icino->ici_revalidate = 0;
icino->ici_st = *st;
icino->ici_fileid.fid_data = &icino->ici_st.st_ino;
icino->ici_fileid.fid_len = sizeof(icino->ici_st.st_ino);
rooti =
_sysio_i_new(fs,
&icino->ici_fileid,
- icino->ici_st.st_mode,
- 0,
+ &icino->ici_st,
1,
&_sysio_incore_dir_ops,
icino);
if (*inop) {
icino = I2IC(*inop);
assert(icino);
- if (icino->ici_revalidate) {
- (*inop)->i_mode = icino->ici_st.st_mode;
- icino->ici_revalidate = 0;
- }
+ (*inop)->i_stbuf = icino->ici_st;
return 0;
}
ino =
_sysio_i_new(ino->i_fs,
&icino->ici_fileid,
- icino->ici_st.st_mode,
- 0,
+ &icino->ici_st
1,
ops,
icino);
if (mask & SETATTR_MODE) {
icino->ici_st.st_mode =
(icino->ici_st.st_mode & S_IFMT) | (stbuf->st_mode & 07777);
- icino->ici_revalidate = 1;
}
if (mask & SETATTR_MTIME)
icino->ici_st.st_mtime = stbuf->st_mtime;
icino->ici_st.st_gid = stbuf->st_gid;
icino->ici_st.st_ctime = time(NULL);
+ ino->i_stbuf = icino->ici_st;
out:
return err;
}
ino =
_sysio_i_new(pno->p_parent->p_base->pb_ino->i_fs,
&icino->ici_fileid,
- stat.st_mode,
- 0,
+ &stat,
1,
&_sysio_incore_dir_ops,
icino);
}
static int
-incore_create(struct pnode *pno, struct intnl_stat *st)
+incore_create(struct pnode *pno, struct intnl_stat *stat)
{
struct inode *dino, *ino;
struct incore_inode *icino;
dino = pno->p_parent->p_base->pb_ino;
assert(dino);
- icino = incore_i_alloc(FS2ICFS(dino->i_fs), st);
+ icino = incore_i_alloc(FS2ICFS(dino->i_fs), stat);
if (!icino)
return -ENOSPC;
ino =
_sysio_i_new(dino->i_fs,
&icino->ici_fileid,
- st->st_mode,
- st->st_rdev,
+ stat,
1,
- S_ISREG(st->st_mode)
+ S_ISREG(stat->st_mode)
? &_sysio_incore_file_ops
: &_sysio_incore_dev_ops,
icino);
err =
incore_directory_insert(I2IC(dino),
&pno->p_base->pb_name,
- st->st_ino,
+ stat->st_ino,
INCORE_D_TYPEOF(icino->ici_st.st_mode));
if (err) {
I_RELE(ino);
int err;
assert(!new->p_base->pb_ino);
- assert(!S_ISDIR(old->p_base->pb_ino->i_mode));
+ assert(!S_ISDIR(old->p_base->pb_ino->i_stbuf.st_mode));
/*
* Can bump the link count?