summaryrefslogtreecommitdiff
path: root/sys/src/cmd/hjfs/buf.c
AgeCommit message (Collapse)Author
2017-03-28hjfs: Fix bugs in ref count scan check. Enable as a console command (caveat: ↵spew
command arguments will change as I implement more functionality)
2017-03-27hjfs: simplify dprintingspew
2015-08-13hjfs: fix deadlockscinap_lenrek
buffers which still have requests queued on them are not free! we cannot chanedev() a buffer while it has still requests queued on it and we canot just queue our request (having different address) on the buffer while there are other requests before it, otherwise we would create artificial block dependency that can cause deadlock.
2015-08-11hjfs: fix abort() in givebuf()cinap_lenrek
it is possible for another getbuf() on buffer b to come in before undelayreq() calls givebuf() on a buffer again. then givebuf() would find b already busy and abort(). instead, we now handle what getbuf() did in givebuf() and consider the Buf* argument to givebuf() as a hint only for the case when we have to actually flush/read a block from disk.
2014-02-04hjfs: fix wrong channel size for syncb (fixes amd64 crash)cinap_lenrek
2012-11-18hjfs: fix dump / createcinap_lenrek
getdent() introduced a bug as the qid check fails in the case when we walk to DUMPROOTQID, but get ROOTQID in the directory instead. newentry() getblk(..., GBCREATE) caused the whole directory to get dumped until it hit a free slot. we cannot do this because this changes the addresses of Dentries of files but doesnt update the loctree. this caused the bogus walks when we hit a different directory than we expected. what we do now is the following: newentry() was changed to never dump anything. it will just read the directory and return a the address of a free slot or create a new block having space for one. chancreat() then makes a loc in the loctree for the free slot, drops the dirent buffer and calls willmodify() on the new slot. this will dump the block containing the slot (and possible other slots) and updates the loctree to the new version. after that, chancreate() modifies the slot filling the Dentry. there should be no race, as newentry() skips slots that have a loc in the loctree. theres one case where newentry() can dump the block immidiately when it is called from dump. added new parameter for that and documented in the comment. createuserdir() was simplified by just calling chancreat(). to get arround the permission check, a new per channel flag CHFNOPERM was added.
2012-11-16hjfs: dentry qid checking, prevent newentry() from allocating already in use ↵cinap_lenrek
slot always check if the directory entry qid from the loc still matches the one on disk before doing anything. helps catching bugs and is basically equivalent to what cwfs does with its checktag. make a haveloc() check in newentry() to make sure we dont allocate a file slot thats still in use, but deleted. this seems to fix the NPROC>1 build problems.
2012-08-07added hjfsaiju