namei returns locked parent dir inode for create / unlink

don't hold fd table lock across idecref() (latter does block i/o)
idecref calls iput() in case last ref -> freeing inode
dir size is 512 * # blocks, so readi/writei &c work
unlink deletes dirent even if ip->nlink > 0
This commit is contained in:
rtm 2006-08-13 12:22:44 +00:00
parent c372e8dc34
commit 211ff0c67e
7 changed files with 122 additions and 84 deletions

15
Notes
View file

@ -365,3 +365,18 @@ two bugs in unlink: don't just return if nlink > 0,
and search for name, not inum
is there a create/create race for same file name?
resulting in two entries w/ same name in directory?
namei
return just inode
return offset in dir where found, w/ dir locked, for unlink
return dir locked, for mknod
is the offset alone useful? how do I read/write it?
test: one process unlinks a file while another links to it
test: simultaneous create of same file
test: one process opens a file while another deletes it
oy, mkfs wants dir size to be last written entry, but i
want it to be nblocks*512
maybe fix kernel code to handle former