summaryrefslogtreecommitdiff
path: root/sys/src/cmd/exportfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-08-02 19:22:10 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-08-02 19:22:10 +0200
commit5302e88796f0ad7fb2490e68b72ef6cd417dfb03 (patch)
treec213e118e977033b6c616f80d410902bd9e69fa7 /sys/src/cmd/exportfs
parentb185d2fe5c28aa1ba7bd0469c84a01e791d76f5e (diff)
exportfs: simplify freefile() code
remove impossible checks, rewrite as while loop.
Diffstat (limited to 'sys/src/cmd/exportfs')
-rw-r--r--sys/src/cmd/exportfs/exportfs.c44
1 files changed, 19 insertions, 25 deletions
diff --git a/sys/src/cmd/exportfs/exportfs.c b/sys/src/cmd/exportfs/exportfs.c
index 24308dcc4..af0b6ac62 100644
--- a/sys/src/cmd/exportfs/exportfs.c
+++ b/sys/src/cmd/exportfs/exportfs.c
@@ -587,30 +587,25 @@ freefile(File *f)
{
File *parent, *child;
-Loop:
- f->ref--;
- if(f->ref > 0)
- return;
- freecnt++;
- if(f->ref < 0) abort();
- DEBUG(DFD, "free %s\n", f->name);
- /* delete from parent */
- parent = f->parent;
- if(parent->child == f)
- parent->child = f->childlist;
- else{
- for(child=parent->child; child->childlist!=f; child=child->childlist)
- if(child->childlist == nil)
- fatal("bad child list");
- child->childlist = f->childlist;
+ while(--f->ref == 0){
+ freecnt++;
+ DEBUG(DFD, "free %s\n", f->name);
+ /* delete from parent */
+ parent = f->parent;
+ if(parent->child == f)
+ parent->child = f->childlist;
+ else{
+ for(child = parent->child; child->childlist != f; child = child->childlist) {
+ if(child->childlist == nil)
+ fatal("bad child list");
+ }
+ child->childlist = f->childlist;
+ }
+ freeqid(f->qidt);
+ free(f->name);
+ free(f);
+ f = parent;
}
- freeqid(f->qidt);
- free(f->name);
- f->name = nil;
- free(f);
- f = parent;
- if(f != nil)
- goto Loop;
}
File *
@@ -744,8 +739,7 @@ freeqid(Qidtab *q)
ulong h;
Qidtab *l;
- q->ref--;
- if(q->ref > 0)
+ if(--q->ref)
return;
qfreecnt++;
h = qidhash(q->path);