summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrtm <rtm>2006-08-13 20:06:42 +0000
committerrtm <rtm>2006-08-13 20:06:42 +0000
commite4bcd2a3a919ef040d2a577a1025f286c3b57168 (patch)
tree7b42cfb4ed65e40131cf5b5f76440521a8c45c55
parent17e3cf15bac0c1ac60780ce7d1d228442ff08ed9 (diff)
downloadxv6-labs-e4bcd2a3a919ef040d2a577a1025f286c3b57168.tar.gz
xv6-labs-e4bcd2a3a919ef040d2a577a1025f286c3b57168.tar.bz2
xv6-labs-e4bcd2a3a919ef040d2a577a1025f286c3b57168.zip
wdir now uses readi/writei
-rw-r--r--fs.c45
-rw-r--r--picirq.c1
2 files changed, 13 insertions, 33 deletions
diff --git a/fs.c b/fs.c
index fbb4a8c..cf717a2 100644
--- a/fs.c
+++ b/fs.c
@@ -450,43 +450,24 @@ void
wdir(struct inode *dp, char *name, uint ino)
{
uint off;
- struct buf *bp = 0;
- struct dirent *ep = 0;
+ struct dirent de;
int i;
- int lb;
-
- if(dp->size % BSIZE)
- dp->size += (BSIZE - dp->size % BSIZE);
-
- for(off = 0; off < dp->size; off += BSIZE) {
- bp = bread(dp->dev, bmap(dp, off / BSIZE));
- for(ep = (struct dirent *) bp->data;
- ep < (struct dirent *) (bp->data + BSIZE);
- ep++){
- if(ep->inum == 0)
- goto found;
- }
- brelse(bp);
- }
- lb = dp->size / BSIZE;
- if (lb >= NDIRECT) {
- panic ("wdir: too many entries");
+
+ for(off = 0; off < dp->size; off += sizeof(de)){
+ if(readi(dp, (char *) &de, off, sizeof(de)) != sizeof(de))
+ panic("wdir read");
+ if(de.inum == 0)
+ break;
}
- dp->addrs[lb] = balloc(dp->dev);
- bp = bread(dp->dev, dp->addrs[lb]);
- memset(bp->data, 0, BSIZE);
- ep = (struct dirent *) (bp->data);
- dp->size += BSIZE;
- found:
- ep->inum = ino;
+ de.inum = ino;
for(i = 0; i < DIRSIZ && name[i]; i++)
- ep->name[i] = name[i];
+ de.name[i] = name[i];
for( ; i < DIRSIZ; i++)
- ep->name[i] = '\0';
- bwrite (bp, bmap(dp, off/BSIZE)); // write directory block
- brelse(bp);
- iupdate(dp);
+ de.name[i] = '\0';
+
+ if(writei(dp, (char *) &de, off, sizeof(de)) != sizeof(de))
+ panic("wdir write");
}
struct inode *
diff --git a/picirq.c b/picirq.c
index 28b5e5d..ab3e7b9 100644
--- a/picirq.c
+++ b/picirq.c
@@ -17,7 +17,6 @@ static ushort irq_mask_8259A = 0xFFFF & ~(1<<IRQ_SLAVE);
static void
irq_setmask_8259A(ushort mask)
{
- int i;
irq_mask_8259A = mask;
outb(IO_PIC1+1, (char)mask);