Skip to content

Commit

Permalink
[PATCH] smbfs readdir vs signal fix
Browse files Browse the repository at this point in the history
An old patch designed to fix http://bugme.osdl.org/show_bug.cgi?id=4497,
"getdents gives empty/random result upon signal".

If smbfs's readdir() is interupted by a signal, smb_readdir() failed to
noticed that and proceeded to treat the unread-into page as valid directory
contents.  Fix that up by handling the -ERESTARTSYS.

Thanks to Stian Skjelstad for reporting and testing.

Cc: Stian Skjelstad <stian@nixia.no>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Andrew Morton authored and Linus Torvalds committed Feb 1, 2006
1 parent 389d1ea commit caf7360
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion fs/smbfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,8 @@ smb_readdir(struct file *filp, void *dirent, filldir_t filldir)
ctl.valid = 1;
read_really:
result = server->ops->readdir(filp, dirent, filldir, &ctl);
if (result == -ERESTARTSYS && page)
ClearPageUptodate(page);
if (ctl.idx == -1)
goto invalid_cache; /* retry */
ctl.head.end = ctl.fpos - 1;
Expand All @@ -217,7 +219,8 @@ smb_readdir(struct file *filp, void *dirent, filldir_t filldir)
if (page) {
cache->head = ctl.head;
kunmap(page);
SetPageUptodate(page);
if (result != -ERESTARTSYS)
SetPageUptodate(page);
unlock_page(page);
page_cache_release(page);
}
Expand Down

0 comments on commit caf7360

Please sign in to comment.