-/* lfs_vnops.c 4.25 82/06/07 */
+/* lfs_vnops.c 4.26 82/06/10 */
#ifdef SIMFS
#include "../h/sysrenam.h"
if(access(ip, IEXEC))
goto bad;
iunlock(ip);
- if (*ipp) {
- ilock(*ipp);
- iput(*ipp);
- }
+ if (*ipp)
+ irele(*ipp);
*ipp = ip;
return;
u.u_error = EISDIR;
}
}
- if (u.u_error)
- goto out;
+ if (u.u_error) {
+ iput(ip);
+ return;
+ }
if (trf == 1)
itrunc(ip);
iunlock(ip);
u.u_ofile[i] = NULL;
fp->f_count--;
out:
- if (ip != NULL)
- iput(ip);
+ irele(ip);
}
/*
ip->i_flag |= ICHG;
}
out1:
- iput(ip);
+ irele(ip);
}
/*
struct fs *fs;
struct buf *bp;
int lbn, bn, base;
+ int unlinkingdot = 0;
pp = namei(uchar, 2, 0);
if(pp == NULL)
if (pp->i_number == u.u_dent.d_ino) {
ip = pp;
ip->i_count++;
+ unlinkingdot++;
} else
ip = iget(pp->i_dev, pp->i_fs, u.u_dent.d_ino);
if(ip == NULL)
ip->i_flag |= ICHG;
out:
- iput(ip);
+ if (unlinkingdot)
+ irele(ip);
+ else
+ iput(ip);
out1:
iput(pp);
}