Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Over of the changes:
[fs/lustre-release.git]
/
lustre
/
obdfs
/
dir.c
diff --git
a/lustre/obdfs/dir.c
b/lustre/obdfs/dir.c
index
7e87052
..
fb171ad
100644
(file)
--- a/
lustre/obdfs/dir.c
+++ b/
lustre/obdfs/dir.c
@@
-47,14
+47,21
@@
static ssize_t obdfs_dir_read (struct file * filp, char * buf,
{
return -EISDIR;
}
+#endif
-
-int ext2_check_dir_entry (const char * function, struct inode * dir,
+int obdfs_check_dir_entry (const char * function, struct inode * dir,
struct ext2_dir_entry_2 * de,
- struct
buffer_head * bh
,
+ struct
page * page
,
unsigned long offset)
{
const char * error_msg = NULL;
+ return 1;
+
+ ENTRY;
+ if ( !de ) {
+ error_msg = "null de passed";
+ return 1;
+ }
if (le16_to_cpu(de->rec_len) < EXT2_DIR_REC_LEN(1))
error_msg = "rec_len is smaller than minimal";
@@
-62,22
+69,25
@@
int ext2_check_dir_entry (const char * function, struct inode * dir,
error_msg = "rec_len % 4 != 0";
else if (le16_to_cpu(de->rec_len) < EXT2_DIR_REC_LEN(de->name_len))
error_msg = "rec_len is too small for name_len";
- else if (dir && ((char *) de -
bh->b_data
) + le16_to_cpu(de->rec_len) >
+ else if (dir && ((char *) de -
(char *)page_address(page)
) + le16_to_cpu(de->rec_len) >
dir->i_sb->s_blocksize)
error_msg = "directory entry across blocks";
- else if (dir && le32_to_cpu(de->inode) > le32_to_cpu(dir->i_sb->u.ext2_sb.s_es->s_inodes_count))
- error_msg = "inode out of bounds";
+#if 0 /* this one doesn't yet work for OBDFS */
+ else
+if (dir && le32_to_cpu(de->inode) > le32_to_cpu(dir->i_sb->u.ext2_sb.s_es->s_inodes_count))
+ error_msg = "inode out of bounds";
+#endif
if (error_msg != NULL)
ext2_error (dir->i_sb, function, "bad entry in directory #%lu: %s - "
"offset=%lu, inode=%lu, rec_len=%d, name_len=%d",
dir->i_ino, error_msg, offset,
(unsigned long) le32_to_cpu(de->inode),
le16_to_cpu(de->rec_len), de->name_len);
+ EXIT;
return error_msg == NULL ? 1 : 0;
}
-#endif
int obdfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
{
@@
-89,13
+99,17
@@
int obdfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
struct page *page;
struct inode *inode = filp->f_dentry->d_inode;
+ ENTRY;
+
sb = inode->i_sb;
stored = 0;
offset = filp->f_pos & (PAGE_SIZE - 1);
while (!error && !stored && filp->f_pos < inode->i_size) {
- page = obdfs_getpage(inode, offset);
+ IDEBUG(inode);
+ page = obdfs_getpage(inode, offset, 0, LOCKED);
+ PDEBUG(page, "readdir");
if (!page) {
ext2_error (sb, "ext2_readdir",
"directory #%lu contains a hole at offset %lu",
@@
-170,7
+184,10
@@
revalidate:
filp->f_pos += le16_to_cpu(de->rec_len);
}
offset = 0;
- }
+ UnlockPage(page);
+ page_cache_release(page);
+ }
UPDATE_ATIME(inode);
+ EXIT;
return 0;
}