From: Derrick Brashear Date: Tue, 26 Aug 2003 03:43:21 +0000 (+0000) Subject: dir-dont-oops-on-corruption-20030825 X-Git-Tag: openafs-devel-1_3_50~80 X-Git-Url: https://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=d1e8e34e6112e3f5013f4ffc5db7be8faef082da dir-dont-oops-on-corruption-20030825 If afs_dir_GetBlob gives us a corrupt blob, try to handle it gracefully. Ideally, we'd figure out *why*, but, what crash dumps? --- diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index d6bbf18..3d402fd 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -350,7 +350,17 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir) ino = (avc->fid.Fid.Volume << 16) + ntohl(de->fid.vnode); ino &= 0x7fffffff; /* Assumes 32 bit ino_t ..... */ - len = strlen(de->name); + if (de->name) + len = strlen(de->name); + else { + printf("afs_linux_readdir: afs_dir_GetBlob failed, null name (inode %x, dirpos %d)\n", + &tdc->f.inode, dirpos); + DRelease(de, 0); + afs_PutDCache(tdc); + ReleaseReadLock(&avc->lock); + afs_PutFakeStat(&fakestat); + return -ENOENT; + } /* filldir returns -EINVAL when the buffer is full. */ #if (defined(AFS_LINUX24_ENV) || defined(pgoff2loff)) && defined(DECLARE_FSTYPE)