off = 1;
        }
        if (filp->f_pos == 1) {
-               ino_t ino = filp->f_dentry->d_parent->d_inode->i_ino;
+               ino_t ino = parent_ino(filp->f_dentry);
                dout("readdir off 1 -> '..'\n");
                if (filldir(dirent, "..", 2, ceph_make_fpos(0, 1),
                            ceph_translate_ino(inode->i_sb, ino),
 
                file->f_pos++;
        case 1:
                if (filldir(direntry, "..", 2, file->f_pos,
-                    file->f_path.dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
+                    parent_ino(file->f_path.dentry), DT_DIR) < 0) {
                        cERROR(1, "Filldir for parent dir failed");
                        rc = -ENOMEM;
                        break;
 
                coda_file->f_pos++;
        }
        if (coda_file->f_pos == 1) {
-               ret = filldir(buf, "..", 2, 1, de->d_parent->d_inode->i_ino, DT_DIR);
+               ret = filldir(buf, "..", 2, 1, parent_ino(de), DT_DIR);
                if (ret < 0)
                        goto out;
                result++;