From eec2f5160859ee0ab41f01b1b197f041c4cae5eb Mon Sep 17 00:00:00 2001 From: Andreas Dilger Date: Thu, 23 Jun 2005 00:09:45 -0700 Subject: [PATCH] --- yaml --- r: 2951 b: refs/heads/master c: acfa1823d33859b0db77701726c9ca5ccc6e6f25 h: refs/heads/master i: 2949: 85e23aaca7ec19fadafa2c911e80b1cd7539b11b 2947: cf581f80465f055eff9bd5b671d893ddce3fa0e2 2943: 08c14786d1ae166367c698e94f22ee9cd5da4a4b v: v3 --- [refs] | 2 +- trunk/fs/ext3/namei.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 68948b066a46..224cb7a04d58 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d6e711448137ca3301512cec41a2c2ce852b3d0a +refs/heads/master: acfa1823d33859b0db77701726c9ca5ccc6e6f25 diff --git a/trunk/fs/ext3/namei.c b/trunk/fs/ext3/namei.c index 79742d824a0a..60e44e6dd7a6 100644 --- a/trunk/fs/ext3/namei.c +++ b/trunk/fs/ext3/namei.c @@ -932,8 +932,16 @@ static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry, struct inode *dir = dentry->d_parent->d_inode; sb = dir->i_sb; - if (!(frame = dx_probe(dentry, NULL, &hinfo, frames, err))) - return NULL; + /* NFS may look up ".." - look at dx_root directory block */ + if (namelen > 2 || name[0] != '.'||(name[1] != '.' && name[1] != '\0')){ + if (!(frame = dx_probe(dentry, NULL, &hinfo, frames, err))) + return NULL; + } else { + frame = frames; + frame->bh = NULL; /* for dx_release() */ + frame->at = (struct dx_entry *)frames; /* hack for zero entry*/ + dx_set_block(frame->at, 0); /* dx_root block is 0 */ + } hash = hinfo.hash; do { block = dx_get_block(frame->at);