提交 f3e87bc8 创建 作者: kolya's avatar kolya

make mkdir crash-safer, as noticed by many students on midterm

上级 e1626709
...@@ -238,13 +238,6 @@ create(char *path, int canexist, short type, short major, short minor) ...@@ -238,13 +238,6 @@ create(char *path, int canexist, short type, short major, short minor)
ip->nlink = 1; ip->nlink = 1;
iupdate(ip); iupdate(ip);
if(dirlink(dp, name, ip->inum) < 0){
ip->nlink = 0;
iunlockput(ip);
iunlockput(dp);
return 0;
}
if(type == T_DIR){ // Create . and .. entries. if(type == T_DIR){ // Create . and .. entries.
dp->nlink++; // for ".." dp->nlink++; // for ".."
iupdate(dp); iupdate(dp);
...@@ -252,6 +245,17 @@ create(char *path, int canexist, short type, short major, short minor) ...@@ -252,6 +245,17 @@ create(char *path, int canexist, short type, short major, short minor)
if(dirlink(ip, ".", ip->inum) < 0 || dirlink(ip, "..", dp->inum) < 0) if(dirlink(ip, ".", ip->inum) < 0 || dirlink(ip, "..", dp->inum) < 0)
panic("create dots"); panic("create dots");
} }
if(dirlink(dp, name, ip->inum) < 0){
dp->nlink--;
iupdate(dp);
iunlockput(dp);
ip->nlink = 0;
iunlockput(ip);
return 0;
}
iunlockput(dp); iunlockput(dp);
return ip; return ip;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论