yaffs_EndSearch() should have been called with yaffs locked.
Signed-off-by: Charles Manning <cdhmanning@gmail.com>
sc = yaffs_NewSearch(obj);
if(!sc){
retVal = -ENOMEM;
sc = yaffs_NewSearch(obj);
if(!sc){
retVal = -ENOMEM;
}
T(YAFFS_TRACE_OS, (TSTR("yaffs_readdir: starting at %d\n"), (int)offset));
}
T(YAFFS_TRACE_OS, (TSTR("yaffs_readdir: starting at %d\n"), (int)offset));
(TSTR("yaffs_readdir: entry . ino %d \n"),
(int)inode->i_ino));
yaffs_GrossUnlock(dev);
(TSTR("yaffs_readdir: entry . ino %d \n"),
(int)inode->i_ino));
yaffs_GrossUnlock(dev);
- if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR) < 0)
+ if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR) < 0){
+ yaffs_GrossLock(dev);
yaffs_GrossLock(dev);
offset++;
f->f_pos++;
yaffs_GrossLock(dev);
offset++;
f->f_pos++;
(int)f->f_dentry->d_parent->d_inode->i_ino));
yaffs_GrossUnlock(dev);
if (filldir(dirent, "..", 2, offset,
(int)f->f_dentry->d_parent->d_inode->i_ino));
yaffs_GrossUnlock(dev);
if (filldir(dirent, "..", 2, offset,
- f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0)
+ f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0){
+ yaffs_GrossLock(dev);
yaffs_GrossLock(dev);
offset++;
f->f_pos++;
yaffs_GrossLock(dev);
offset++;
f->f_pos++;
strlen(name),
offset,
this_inode,
strlen(name),
offset,
this_inode,
+ this_type) < 0){
+ yaffs_GrossLock(dev);
yaffs_SearchAdvance(sc);
}
yaffs_SearchAdvance(sc);
}
+out:
+ yaffs_EndSearch(sc);
yaffs_DeviceToContext(dev)->readdirProcess = NULL;
yaffs_DeviceToContext(dev)->readdirProcess = NULL;
-out:
- yaffs_EndSearch(sc);