- /*
- * Special handling for ".." allowing chdir out of mounted
- * file system: indirect .. in root inode to reevaluate
- * in directory file system was mounted on.
- */
- isdotdot = 0;
- if (bcmp(u.u_dent.d_name, "..", 3) == 0) {
- isdotdot++;
- if (dp == u.u_rdir)
- u.u_dent.d_ino = dp->i_number;
- else if (u.u_dent.d_ino == ROOTINO &&
- dp->i_number == ROOTINO) {
- for (i = 1; i < NMOUNT; i++)
- if (mount[i].m_bufp != NULL &&
- mount[i].m_dev == dp->i_dev) {
- iput(dp);
- dp = mount[i].m_inodp;
- ilock(dp);
- dp->i_count++;
- fs = dp->i_fs;
- cp -= 2; /* back over .. */
- goto dirloop2;
- }
- }
- }
-