diff options
| author | Joern Engel <joern@logfs.org> | 2010-03-17 11:00:07 -0400 |
|---|---|---|
| committer | Joern Engel <joern@logfs.org> | 2010-03-27 06:19:15 -0400 |
| commit | e326068806ee044cc617b1dc24be1293fca3fbf6 (patch) | |
| tree | d82ee6e4b4d885a068bf35f2b29fd83a58e082e2 | |
| parent | e07bf553f37cd4fa470b499ff34d800956df2d48 (diff) | |
Prevent schedule while atomic in __logfs_readdir
Apparently filldir can sleep, which forbids kmap_atomic.
Signed-off-by: Joern Engel <joern@logfs.org>
| -rw-r--r-- | fs/logfs/dir.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/logfs/dir.c b/fs/logfs/dir.c index 56a8bfbb0120..c76b4b5c7ff6 100644 --- a/fs/logfs/dir.c +++ b/fs/logfs/dir.c | |||
| @@ -303,12 +303,12 @@ static int __logfs_readdir(struct file *file, void *buf, filldir_t filldir) | |||
| 303 | (filler_t *)logfs_readpage, NULL); | 303 | (filler_t *)logfs_readpage, NULL); |
| 304 | if (IS_ERR(page)) | 304 | if (IS_ERR(page)) |
| 305 | return PTR_ERR(page); | 305 | return PTR_ERR(page); |
| 306 | dd = kmap_atomic(page, KM_USER0); | 306 | dd = kmap(page); |
| 307 | BUG_ON(dd->namelen == 0); | 307 | BUG_ON(dd->namelen == 0); |
| 308 | 308 | ||
| 309 | full = filldir(buf, (char *)dd->name, be16_to_cpu(dd->namelen), | 309 | full = filldir(buf, (char *)dd->name, be16_to_cpu(dd->namelen), |
| 310 | pos, be64_to_cpu(dd->ino), dd->type); | 310 | pos, be64_to_cpu(dd->ino), dd->type); |
| 311 | kunmap_atomic(dd, KM_USER0); | 311 | kunmap(page); |
| 312 | page_cache_release(page); | 312 | page_cache_release(page); |
| 313 | if (full) | 313 | if (full) |
| 314 | break; | 314 | break; |
