Merge pull request #1 from azat/readdir-to-iterate

Implement file_operations.iterate instead of deprecated readdir
This commit is contained in:
Sankar சங்கர் 2013-08-15 02:14:53 -07:00
commit 3f472cec01

View File

@ -11,6 +11,7 @@
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/random.h> #include <linux/random.h>
#include <linux/version.h>
#include "super.h" #include "super.h"
@ -141,7 +142,11 @@ static int simplefs_sb_get_objects_count(struct super_block *vsb,
return 0; return 0;
} }
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)
static int simplefs_iterate(struct file *filp, struct dir_context *ctx)
#else
static int simplefs_readdir(struct file *filp, void *dirent, filldir_t filldir) static int simplefs_readdir(struct file *filp, void *dirent, filldir_t filldir)
#endif
{ {
loff_t pos; loff_t pos;
struct inode *inode; struct inode *inode;
@ -151,7 +156,11 @@ static int simplefs_readdir(struct file *filp, void *dirent, filldir_t filldir)
struct simplefs_dir_record *record; struct simplefs_dir_record *record;
int i; int i;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)
pos = ctx->pos;
#else
pos = filp->f_pos; pos = filp->f_pos;
#endif
inode = filp->f_dentry->d_inode; inode = filp->f_dentry->d_inode;
sb = inode->i_sb; sb = inode->i_sb;
@ -176,8 +185,14 @@ static int simplefs_readdir(struct file *filp, void *dirent, filldir_t filldir)
record = (struct simplefs_dir_record *)bh->b_data; record = (struct simplefs_dir_record *)bh->b_data;
for (i = 0; i < sfs_inode->dir_children_count; i++) { for (i = 0; i < sfs_inode->dir_children_count; i++) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)
dir_emit(ctx, record->filename, SIMPLEFS_FILENAME_MAXLEN,
record->inode_no, DT_UNKNOWN);
ctx->pos += sizeof(struct simplefs_dir_record);
#else
filldir(dirent, record->filename, SIMPLEFS_FILENAME_MAXLEN, pos, filldir(dirent, record->filename, SIMPLEFS_FILENAME_MAXLEN, pos,
record->inode_no, DT_UNKNOWN); record->inode_no, DT_UNKNOWN);
#endif
filp->f_pos += sizeof(struct simplefs_dir_record); filp->f_pos += sizeof(struct simplefs_dir_record);
pos += sizeof(struct simplefs_dir_record); pos += sizeof(struct simplefs_dir_record);
record++; record++;
@ -391,7 +406,11 @@ const struct file_operations simplefs_file_operations = {
const struct file_operations simplefs_dir_operations = { const struct file_operations simplefs_dir_operations = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)
.iterate = simplefs_iterate,
#else
.readdir = simplefs_readdir, .readdir = simplefs_readdir,
#endif
}; };
struct dentry *simplefs_lookup(struct inode *parent_inode, struct dentry *simplefs_lookup(struct inode *parent_inode,