90 lines
2.3 KiB
Diff
90 lines
2.3 KiB
Diff
--- a/vmblock-only/linux/file.c
|
|
+++ b/vmblock-only/linux/file.c
|
|
@@ -38,46 +38,6 @@ typedef u64 inode_num_t;
|
|
typedef ino_t inode_num_t;
|
|
#endif
|
|
|
|
-/* Specifically for our filldir_t callback */
|
|
-typedef struct FilldirInfo {
|
|
- filldir_t filldir;
|
|
- void *dirent;
|
|
-} FilldirInfo;
|
|
-
|
|
-
|
|
-/*
|
|
- *----------------------------------------------------------------------------
|
|
- *
|
|
- * Filldir --
|
|
- *
|
|
- * Callback function for readdir that we use in place of the one provided.
|
|
- * This allows us to specify that each dentry is a symlink, but pass through
|
|
- * everything else to the original filldir function.
|
|
- *
|
|
- * Results:
|
|
- * Original filldir's return value.
|
|
- *
|
|
- * Side effects:
|
|
- * Directory information gets copied to user's buffer.
|
|
- *
|
|
- *----------------------------------------------------------------------------
|
|
- */
|
|
-
|
|
-static int
|
|
-Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir
|
|
- const char *name, // IN: Dirent name
|
|
- int namelen, // IN: len of dirent's name
|
|
- loff_t offset, // IN: Offset
|
|
- inode_num_t ino, // IN: Inode number of dirent
|
|
- unsigned int d_type) // IN: Type of file
|
|
-{
|
|
- FilldirInfo *info = buf;
|
|
-
|
|
- /* Specify DT_LNK regardless */
|
|
- return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
|
|
-}
|
|
-
|
|
-
|
|
/* File operations */
|
|
|
|
/*
|
|
@@ -166,11 +126,10 @@ FileOpOpen(struct inode *inode, // IN
|
|
|
|
static int
|
|
FileOpReaddir(struct file *file, // IN
|
|
- void *dirent, // IN
|
|
- filldir_t filldir) // IN
|
|
+ struct dir_context *ctx) // IN
|
|
{
|
|
int ret;
|
|
- FilldirInfo info;
|
|
+
|
|
struct file *actualFile;
|
|
|
|
if (!file) {
|
|
@@ -184,12 +143,10 @@ FileOpReaddir(struct file *file, // IN
|
|
return -EINVAL;
|
|
}
|
|
|
|
- info.filldir = filldir;
|
|
- info.dirent = dirent;
|
|
-
|
|
- actualFile->f_pos = file->f_pos;
|
|
- ret = vfs_readdir(actualFile, Filldir, &info);
|
|
- file->f_pos = actualFile->f_pos;
|
|
+ /* Ricky Wong Yung Fei:
|
|
+ * Manipulation of pos is now handled internally by iterate_dir().
|
|
+ */
|
|
+ ret = iterate_dir(actualFile, ctx);
|
|
|
|
return ret;
|
|
}
|
|
@@ -237,7 +194,7 @@ FileOpRelease(struct inode *inode, // IN
|
|
|
|
|
|
struct file_operations RootFileOps = {
|
|
- .readdir = FileOpReaddir,
|
|
+ .iterate = FileOpReaddir,
|
|
.open = FileOpOpen,
|
|
.release = FileOpRelease,
|
|
};
|