ip->minor = minor;
ip->nlink = 1;
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.
dp->nlink++; // for ".."
if(dirlink(ip, ".", ip->inum) < 0 || dirlink(ip, "..", dp->inum) < 0)
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);
return ip;
}