[Libsysio-commit] HEAD: libsysio/drivers/incore fs_incore.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2007-09-21 19:41:40
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv759/drivers/incore Modified Files: fs_incore.c Log Message: The pnode base name cache is now maintained as a hashed table of trees, instead of lists. The pnode base record was re-organized. The qstr name record and parent were grouped under a pnodE_base_key sub-record and the new field named pb_key. As well, the LIST_ENTRY for pb_names was removed and a struct tree record added, reflecting the conversion to trees from lists in the hash table slots. + Fixed an issue in inode.c where the pnode base nodes were being reclaimed wholesale, instead of partially, on every call to the garbage collector. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -w -b -B -p -r1.33 -r1.34 --- fs_incore.c 2 Jul 2007 18:58:15 -0000 1.33 +++ fs_incore.c 21 Sep 2007 19:41:37 -0000 1.34 @@ -835,7 +835,7 @@ _sysio_incore_dirop_lookup(struct pnode icino = I2IC(ino); INCORE_LD_INIT(&lookup_data, ULONG_MAX, - &pno->p_base->pb_name); + &pno->p_base->pb_key.pbk_name); de = incore_directory_probe(icino->ici_data, icino->ici_st.st_size, @@ -1228,7 +1228,7 @@ _sysio_incore_dirop_mkdir(struct pnode * */ err = incore_directory_insert(parent, - &pno->p_base->pb_name, + &pno->p_base->pb_key.pbk_name, stat.st_ino, INCORE_D_TYPEOF(S_IFDIR)); @@ -1299,11 +1299,11 @@ _sysio_incore_dirop_rmdir(struct pnode * struct incore_inode *icino = I2IC(ino); int err; - if (!pno->p_base->pb_name.len || - (pno->p_base->pb_name.name[0] == '.' && - (pno->p_base->pb_name.len == 1 || - (pno->p_base->pb_name.len == 2 && - pno->p_base->pb_name.name[1] == '.')))) + if (!pno->p_base->pb_key.pbk_name.len || + (pno->p_base->pb_key.pbk_name.name[0] == '.' && + (pno->p_base->pb_key.pbk_name.len == 1 || + (pno->p_base->pb_key.pbk_name.len == 2 && + pno->p_base->pb_key.pbk_name.name[1] == '.')))) return -EINVAL; if (!S_ISDIR(icino->ici_st.st_mode)) @@ -1315,7 +1315,7 @@ _sysio_incore_dirop_rmdir(struct pnode * pno->p_base->pb_ino = NULL; err = incore_unlink_entry(I2IC(pno->p_parent->p_base->pb_ino), - &pno->p_base->pb_name); + &pno->p_base->pb_key.pbk_name); return err; } @@ -1355,7 +1355,7 @@ incore_create(struct pnode *pno, struct */ err = incore_directory_insert(I2IC(dino), - &pno->p_base->pb_name, + &pno->p_base->pb_key.pbk_name, stat->st_ino, INCORE_D_TYPEOF(icino->ici_st.st_mode)); if (err) { @@ -1429,7 +1429,7 @@ _sysio_incore_dirop_link(struct pnode *o */ err = incore_directory_insert(I2IC(new->p_parent->p_base->pb_ino), - &new->p_base->pb_name, + &new->p_base->pb_key.pbk_name, icino->ici_st.st_ino, INCORE_D_TYPEOF(icino->ici_st.st_mode)); if (err) @@ -1457,7 +1457,7 @@ _sysio_incore_dirop_rename(struct pnode return -ENOTEMPTY; err = incore_unlink_entry(I2IC(new->p_parent->p_base->pb_ino), - &new->p_base->pb_name); + &new->p_base->pb_key.pbk_name); if (err) return err; } @@ -1467,7 +1467,7 @@ _sysio_incore_dirop_rename(struct pnode */ err = incore_directory_insert(I2IC(new->p_parent->p_base->pb_ino), - &new->p_base->pb_name, + &new->p_base->pb_key.pbk_name, icino->ici_st.st_ino, INCORE_D_TYPEOF(icino->ici_st.st_mode)); if (err) @@ -1477,7 +1477,7 @@ _sysio_incore_dirop_rename(struct pnode */ err = incore_unlink_entry(I2IC(old->p_parent->p_base->pb_ino), - &old->p_base->pb_name); + &old->p_base->pb_key.pbk_name); if (err) abort(); @@ -1507,7 +1507,7 @@ _sysio_incore_dirop_unlink(struct pnode err = incore_unlink_entry(I2IC(pno->p_parent->p_base->pb_ino), - &pno->p_base->pb_name); + &pno->p_base->pb_key.pbk_name); return err; } |