summaryrefslogtreecommitdiff
path: root/kernel/sysfile.c
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2022-08-23 08:23:12 -0400
committerRobert Morris <[email protected]>2022-08-23 08:23:12 -0400
commitdc405cdb7b4e4d4bb3fc50b3e7f44e8795c0218e (patch)
treeeaedc212d1383b65009dd6f6ea8a63fcf82daedc /kernel/sysfile.c
parentcd6207a972cf7692dceb837f460234eae9df5052 (diff)
downloadxv6-labs-dc405cdb7b4e4d4bb3fc50b3e7f44e8795c0218e.tar.gz
xv6-labs-dc405cdb7b4e4d4bb3fc50b3e7f44e8795c0218e.tar.bz2
xv6-labs-dc405cdb7b4e4d4bb3fc50b3e7f44e8795c0218e.zip
don't panic if out of disk space when extending a directory.
Diffstat (limited to 'kernel/sysfile.c')
-rw-r--r--kernel/sysfile.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/sysfile.c b/kernel/sysfile.c
index 970a72a..4c0470e 100644
--- a/kernel/sysfile.c
+++ b/kernel/sysfile.c
@@ -279,8 +279,13 @@ create(char *path, short type, short major, short minor)
panic("create dots");
}
- if(dirlink(dp, name, ip->inum) < 0)
- panic("create: dirlink");
+ if(dirlink(dp, name, ip->inum) < 0){
+ // oops. we don't need ip after all.
+ ip->nlink = 0;
+ iupdate(ip);
+ iunlockput(ip);
+ ip = 0;
+ }
iunlockput(dp);