Browse Source

Plan 9 from Bell Labs 2005-03-23

David du Colombier 19 years ago
parent
commit
97b608a4c9
5 changed files with 45 additions and 18 deletions
  1. 3 4
      dist/replica/_plan9.db
  2. 2 2
      dist/replica/plan9.db
  3. 2 0
      dist/replica/plan9.log
  4. 1 1
      sys/src/9/ppc/mmu.c
  5. 37 11
      sys/src/games/music/playlistfs/fs.c

+ 3 - 4
dist/replica/_plan9.db

@@ -20,7 +20,7 @@
 386/bin/9660srv - 775 sys sys 1108354539 103973
 386/bin/aan - 775 sys sys 1108354539 130710
 386/bin/acid - 775 sys sys 1108960003 355983
-386/bin/acme - 775 sys sys 1111205297 428543
+386/bin/acme - 775 sys sys 1111464452 428542
 386/bin/ape - 20000000775 sys sys 1016944144 0
 386/bin/ape/basename - 775 sys sys 1087442501 132681
 386/bin/ape/cc - 775 sys sys 1104121958 70291
@@ -5592,7 +5592,7 @@ sys/src/9/ppc/main.c - 664 sys sys 1097073343 9041
 sys/src/9/ppc/mcc.c - 664 sys sys 1059490752 9667
 sys/src/9/ppc/mem.h - 664 sys sys 1091021860 7002
 sys/src/9/ppc/mkfile - 664 sys sys 1067722849 1813
-sys/src/9/ppc/mmu.c - 664 sys sys 1059490753 4865
+sys/src/9/ppc/mmu.c - 664 sys sys 1111504133 4864
 sys/src/9/ppc/msaturn.c - 664 sys sys 1072705482 2801
 sys/src/9/ppc/msaturn.h - 664 sys sys 1059490753 99
 sys/src/9/ppc/mtx.c - 664 sys sys 1059490753 177
@@ -11369,7 +11369,7 @@ sys/src/games/music/mkfile - 664 sys sys 1103793915 723
 sys/src/games/music/mkinc - 664 sys sys 1103793915 92
 sys/src/games/music/playlistfs - 20000000775 sys sys 1103794221 0
 sys/src/games/music/playlistfs/boilerplate.c - 664 sys sys 1105531426 1362
-sys/src/games/music/playlistfs/fs.c - 664 sys sys 1111156578 17544
+sys/src/games/music/playlistfs/fs.c - 664 sys sys 1111504109 17985
 sys/src/games/music/playlistfs/main.c - 664 sys sys 1103793922 1636
 sys/src/games/music/playlistfs/mk.dep - 664 sys sys 1103793923 594
 sys/src/games/music/playlistfs/mkfile - 664 sys sys 1103793923 187
@@ -12482,4 +12482,3 @@ usr/glenda/lib/profile - 664 glenda glenda 1105128663 890
 usr/glenda/readme.acme - 664 glenda glenda 1019860628 4753
 usr/glenda/readme.rio - 664 glenda glenda 1019860628 6370
 usr/glenda/tmp - 20000000775 glenda glenda 1018802620 0
-386/bin/acme - 775 sys sys 1111464452 428542

+ 2 - 2
dist/replica/plan9.db

@@ -5592,7 +5592,7 @@ sys/src/9/ppc/main.c - 664 sys sys 1097073343 9041
 sys/src/9/ppc/mcc.c - 664 sys sys 1059490752 9667
 sys/src/9/ppc/mem.h - 664 sys sys 1091021860 7002
 sys/src/9/ppc/mkfile - 664 sys sys 1067722849 1813
-sys/src/9/ppc/mmu.c - 664 sys sys 1059490753 4865
+sys/src/9/ppc/mmu.c - 664 sys sys 1111504133 4864
 sys/src/9/ppc/msaturn.c - 664 sys sys 1072705482 2801
 sys/src/9/ppc/msaturn.h - 664 sys sys 1059490753 99
 sys/src/9/ppc/mtx.c - 664 sys sys 1059490753 177
@@ -11369,7 +11369,7 @@ sys/src/games/music/mkfile - 664 sys sys 1103793915 723
 sys/src/games/music/mkinc - 664 sys sys 1103793915 92
 sys/src/games/music/playlistfs - 20000000775 sys sys 1103794221 0
 sys/src/games/music/playlistfs/boilerplate.c - 664 sys sys 1105531426 1362
-sys/src/games/music/playlistfs/fs.c - 664 sys sys 1111156578 17544
+sys/src/games/music/playlistfs/fs.c - 664 sys sys 1111504109 17985
 sys/src/games/music/playlistfs/main.c - 664 sys sys 1103793922 1636
 sys/src/games/music/playlistfs/mk.dep - 664 sys sys 1103793923 594
 sys/src/games/music/playlistfs/mkfile - 664 sys sys 1103793923 187

+ 2 - 0
dist/replica/plan9.log

@@ -13975,3 +13975,5 @@
 1111293022 0 c 386/bin/replica/applylog - 775 sys sys 1111291584 116748
 1111381241 0 c sys/src/cmd/acme/look.c - 664 sys sys 1111381048 14210
 1111465860 0 c 386/bin/acme - 775 sys sys 1111464452 428542
+1111505409 0 c sys/src/9/ppc/mmu.c - 664 sys sys 1111504133 4864
+1111505409 1 c sys/src/games/music/playlistfs/fs.c - 664 sys sys 1111504109 17985

+ 1 - 1
sys/src/9/ppc/mmu.c

@@ -23,7 +23,7 @@ static ulong	ptabmask;		/* hash mask */
  *	VSID is 24 bits.  3 are required to distinguish segments in user
  *	space (kernel space only uses the BATs).  pid 0 is reserved.
  *	The top 2 bits of the pid are used as a `color' for the background
- *	pid reclaimation algorithm.
+ *	pid reclamation algorithm.
  */
 
 enum {

+ 37 - 11
sys/src/games/music/playlistfs/fs.c

@@ -84,6 +84,7 @@ char	Ename[] = 	"illegal name";
 char	Ebadctl[] =	"unknown control message";
 char	Epast[] =	"reading past eof";
 
+Fid	*oldfid(int);
 Fid	*newfid(int);
 void	volumeupdater(void*);
 void	playupdater(void*);
@@ -154,6 +155,7 @@ rattach(Worker *w)
 	Req *r;
 
 	r = w->r;
+	r->fid = newfid(r->ifcall.fid);
 	f = r->fid;
 	f->flags |= Busy;
 	f->file = &files[Qdir];
@@ -209,7 +211,9 @@ rwalk(Worker *w)
 	Req *r;
 
 	r = w->r;
-	f = r->fid;
+	r->fid = oldfid(r->ifcall.fid);
+	if((f = r->fid) == nil)
+		return Enotexist;
 	if(f->flags & Open)
 		return Eisopen;
 
@@ -258,7 +262,9 @@ ropen(Worker *w)
 	Req *r;
 
 	r = w->r;
-	f = r->fid;
+	r->fid = oldfid(r->ifcall.fid);
+	if((f = r->fid) == nil)
+		return Enotexist;
 	if(f->flags & Open)
 		return Eisopen;
 
@@ -327,7 +333,9 @@ rread(Worker *w)
 	char *p;
 
 	r = w->r;
-	f = r->fid;
+	r->fid = oldfid(r->ifcall.fid);
+	if((f = r->fid) == nil)
+		return Enotexist;
 	r->ofcall.count = 0;
 	off = r->ifcall.offset;
 	cnt = r->ifcall.count;
@@ -413,7 +421,7 @@ rread(Worker *w)
 			f->vers = f->file->dir.qid.vers;
 		}
 	}else
-		sysfatal("impossible file: 0x%lux, %ld", f->file, f->file - files);
+		abort();
 	return nil;
 }
 
@@ -428,7 +436,9 @@ rwrite(Worker *w)
 	Req *r;
 
 	r = w->r;
-	f = r->fid;
+	r->fid = oldfid(r->ifcall.fid);
+	if((f = r->fid) == nil)
+		return Enotexist;
 	r->ofcall.count = 0;
 	cnt = r->ifcall.count;
 
@@ -569,7 +579,12 @@ rwrite(Worker *w)
 char *
 rclunk(Worker *w)
 {
-	w->r->fid->flags &= ~(Open|Busy);
+	Fid *f;
+
+	f = oldfid(w->r->ifcall.fid);
+	if(f == nil)
+		return Enotexist;
+	f->flags &= ~(Open|Busy);
 	return 0;
 }
 
@@ -585,6 +600,9 @@ rstat(Worker *w)
 	Req *r;
 
 	r = w->r;
+	r->fid = oldfid(r->ifcall.fid);
+	if(r->fid == nil)
+		return Enotexist;
 	r->ofcall.nstat = convD2M(&r->fid->file->dir, r->indata, messagesize - IOHDRSZ);
 	r->ofcall.stat = r->indata;
 	return 0;
@@ -596,6 +614,17 @@ rwstat(Worker*)
 	return Eperm;
 }
 
+Fid *
+oldfid(int fid)
+{
+	Fid *f;
+
+	for(f = fids; f; f = f->next)
+		if(f->fid == fid)
+			return f;
+	return nil;
+}
+
 Fid *
 newfid(int fid)
 {
@@ -608,10 +637,9 @@ newfid(int fid)
 		}else if(ff == nil && (f->flags & Busy) == 0)
 			ff = f;
 	if(ff == nil){
-		ff = malloc(sizeof *ff);
+		ff = mallocz(sizeof *ff, 1);
 		if (ff == nil)
 			sysfatal("malloc: %r");
-		memset(ff, 0, sizeof *ff);
 		ff->next = fids;
 		ff->readers = 0;
 		fids = ff;
@@ -633,10 +661,8 @@ work(Worker *w)
 	r->ofcall.data = (char*)r->indata;
 	if(!fcalls[r->ifcall.type])
 		err = "bad fcall type";
-	else {
-		r->fid = newfid(r->ifcall.fid);
+	else
 		err = (*fcalls[r->ifcall.type])(w);
-	}
 	if(err != (char*)~0){	/* ~0 indicates Flush received */
 		if(err){
 			r->ofcall.type = Rerror;