vfs: make first argument of dir_context.actor typed
authorMiklos Szeredi <miklos@szeredi.hu>
Thu, 30 Oct 2014 16:37:34 +0000 (17:37 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 31 Oct 2014 21:48:54 +0000 (17:48 -0400)
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
19 files changed:
arch/alpha/kernel/osf_sys.c
arch/parisc/hpux/fs.c
drivers/staging/lustre/lustre/llite/llite_nfs.c
fs/afs/dir.c
fs/compat.c
fs/ecryptfs/file.c
fs/exportfs/expfs.c
fs/fat/dir.c
fs/gfs2/export.c
fs/hppfs/hppfs.c
fs/nfsd/nfs4recover.c
fs/nfsd/vfs.c
fs/nfsd/vfs.h
fs/ocfs2/dir.c
fs/ocfs2/journal.c
fs/overlayfs/readdir.c
fs/readdir.c
fs/reiserfs/xattr.c
include/linux/fs.h

index f9c732e1828405d4ed487795eb9442b623709ea9..e51f578636a5718d4f0e438b90b4b78a12b6b7da 100644 (file)
@@ -104,11 +104,12 @@ struct osf_dirent_callback {
 };
 
 static int
-osf_filldir(void *__buf, const char *name, int namlen, loff_t offset,
-           u64 ino, unsigned int d_type)
+osf_filldir(struct dir_context *ctx, const char *name, int namlen,
+           loff_t offset, u64 ino, unsigned int d_type)
 {
        struct osf_dirent __user *dirent;
-       struct osf_dirent_callback *buf = (struct osf_dirent_callback *) __buf;
+       struct osf_dirent_callback *buf =
+               container_of(ctx, struct osf_dirent_callback, ctx);
        unsigned int reclen = ALIGN(NAME_OFFSET + namlen + 1, sizeof(u32));
        unsigned int d_ino;
 
index 2bedafea3d94c13c7215a4be242f12e7a2f185f1..97a7bf8df348b07702deeb04deae8e559827aa57 100644 (file)
@@ -56,11 +56,12 @@ struct getdents_callback {
 
 #define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
 
-static int filldir(void * __buf, const char * name, int namlen, loff_t offset,
-               u64 ino, unsigned d_type)
+static int filldir(struct dir_context *ctx, const char *name, int namlen,
+                  loff_t offset, u64 ino, unsigned d_type)
 {
        struct hpux_dirent __user * dirent;
-       struct getdents_callback * buf = (struct getdents_callback *) __buf;
+       struct getdents_callback *buf =
+               container_of(ctx, struct getdents_callback, ctx);
        ino_t d_ino;
        int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 1, sizeof(long));
 
index ae3a12ab7fa186cfc0d38c6b600f908ddbc4cba3..243a7840457f17457a32d86a039eacedcbceeaa1 100644 (file)
@@ -207,13 +207,15 @@ static int ll_encode_fh(struct inode *inode, __u32 *fh, int *plen,
        return LUSTRE_NFS_FID;
 }
 
-static int ll_nfs_get_name_filldir(void *cookie, const char *name, int namelen,
-                                  loff_t hash, u64 ino, unsigned type)
+static int ll_nfs_get_name_filldir(struct dir_context *ctx, const char *name,
+                                  int namelen, loff_t hash, u64 ino,
+                                  unsigned type)
 {
        /* It is hack to access lde_fid for comparison with lgd_fid.
         * So the input 'name' must be part of the 'lu_dirent'. */
        struct lu_dirent *lde = container_of0(name, struct lu_dirent, lde_name);
-       struct ll_getname_data *lgd = cookie;
+       struct ll_getname_data *lgd =
+               container_of(ctx, struct ll_getname_data, ctx);
        struct lu_fid fid;
 
        fid_le_to_cpu(&fid, &lde->lde_fid);
index a1645b88fe8a47d9a54fde42f1e5084932c96b94..d452f3de54349407afd598319b4b5c9e76e811ed 100644 (file)
@@ -26,7 +26,7 @@ static int afs_readdir(struct file *file, struct dir_context *ctx);
 static int afs_d_revalidate(struct dentry *dentry, unsigned int flags);
 static int afs_d_delete(const struct dentry *dentry);
 static void afs_d_release(struct dentry *dentry);
-static int afs_lookup_filldir(void *_cookie, const char *name, int nlen,
+static int afs_lookup_filldir(struct dir_context *ctx, const char *name, int nlen,
                                  loff_t fpos, u64 ino, unsigned dtype);
 static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
                      bool excl);
@@ -391,10 +391,11 @@ static int afs_readdir(struct file *file, struct dir_context *ctx)
  * - if afs_dir_iterate_block() spots this function, it'll pass the FID
  *   uniquifier through dtype
  */
-static int afs_lookup_filldir(void *_cookie, const char *name, int nlen,
-                             loff_t fpos, u64 ino, unsigned dtype)
+static int afs_lookup_filldir(struct dir_context *ctx, const char *name,
+                             int nlen, loff_t fpos, u64 ino, unsigned dtype)
 {
-       struct afs_lookup_cookie *cookie = _cookie;
+       struct afs_lookup_cookie *cookie =
+               container_of(ctx, struct afs_lookup_cookie, ctx);
 
        _enter("{%s,%u},%s,%u,,%llu,%u",
               cookie->name.name, cookie->name.len, name, nlen,
index b13df99f3534b7e597a3d220949e7f924c1a7c65..6fd272d455e4deb1112c277fc564324fd9d7b3ba 100644 (file)
@@ -847,10 +847,12 @@ struct compat_readdir_callback {
        int result;
 };
 
-static int compat_fillonedir(void *__buf, const char *name, int namlen,
-                       loff_t offset, u64 ino, unsigned int d_type)
+static int compat_fillonedir(struct dir_context *ctx, const char *name,
+                            int namlen, loff_t offset, u64 ino,
+                            unsigned int d_type)
 {
-       struct compat_readdir_callback *buf = __buf;
+       struct compat_readdir_callback *buf =
+               container_of(ctx, struct compat_readdir_callback, ctx);
        struct compat_old_linux_dirent __user *dirent;
        compat_ulong_t d_ino;
 
@@ -915,11 +917,12 @@ struct compat_getdents_callback {
        int error;
 };
 
-static int compat_filldir(void *__buf, const char *name, int namlen,
+static int compat_filldir(struct dir_context *ctx, const char *name, int namlen,
                loff_t offset, u64 ino, unsigned int d_type)
 {
        struct compat_linux_dirent __user * dirent;
-       struct compat_getdents_callback *buf = __buf;
+       struct compat_getdents_callback *buf =
+               container_of(ctx, struct compat_getdents_callback, ctx);
        compat_ulong_t d_ino;
        int reclen = ALIGN(offsetof(struct compat_linux_dirent, d_name) +
                namlen + 2, sizeof(compat_long_t));
@@ -1001,11 +1004,13 @@ struct compat_getdents_callback64 {
        int error;
 };
 
-static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t offset,
-                    u64 ino, unsigned int d_type)
+static int compat_filldir64(struct dir_context *ctx, const char *name,
+                           int namlen, loff_t offset, u64 ino,
+                           unsigned int d_type)
 {
        struct linux_dirent64 __user *dirent;
-       struct compat_getdents_callback64 *buf = __buf;
+       struct compat_getdents_callback64 *buf =
+               container_of(ctx, struct compat_getdents_callback64, ctx);
        int reclen = ALIGN(offsetof(struct linux_dirent64, d_name) + namlen + 1,
                sizeof(u64));
        u64 off;
index f5bce9096555a66be549a2735c783d1e8c18fa9a..80154ec4f8c20118a06d6e38a806180379b52abd 100644 (file)
@@ -75,11 +75,11 @@ struct ecryptfs_getdents_callback {
 
 /* Inspired by generic filldir in fs/readdir.c */
 static int
-ecryptfs_filldir(void *dirent, const char *lower_name, int lower_namelen,
-                loff_t offset, u64 ino, unsigned int d_type)
+ecryptfs_filldir(struct dir_context *ctx, const char *lower_name,
+                int lower_namelen, loff_t offset, u64 ino, unsigned int d_type)
 {
        struct ecryptfs_getdents_callback *buf =
-           (struct ecryptfs_getdents_callback *)dirent;
+               container_of(ctx, struct ecryptfs_getdents_callback, ctx);
        size_t name_size;
        char *name;
        int rc;
index b01fbfb51f436fc3c5cf37942029aeafaab67284..a2b350ddd4027a099f3748cfab8c64916b5353d1 100644 (file)
@@ -241,10 +241,11 @@ struct getdents_callback {
  * A rather strange filldir function to capture
  * the name matching the specified inode number.
  */
-static int filldir_one(void * __buf, const char * name, int len,
+static int filldir_one(struct dir_context *ctx, const char *name, int len,
                        loff_t pos, u64 ino, unsigned int d_type)
 {
-       struct getdents_callback *buf = __buf;
+       struct getdents_callback *buf =
+               container_of(ctx, struct getdents_callback, ctx);
        int result = 0;
 
        buf->sequence++;
index 3963ede84eb021887531ea94eb41ea4f203fdc0e..c5d6bb939d191d1f7a0219174138fb540a48fdb1 100644 (file)
@@ -702,10 +702,11 @@ static int fat_readdir(struct file *file, struct dir_context *ctx)
 }
 
 #define FAT_IOCTL_FILLDIR_FUNC(func, dirent_type)                         \
-static int func(void *__buf, const char *name, int name_len,              \
+static int func(struct dir_context *ctx, const char *name, int name_len,   \
                             loff_t offset, u64 ino, unsigned int d_type)  \
 {                                                                         \
-       struct fat_ioctl_filldir_callback *buf = __buf;                    \
+       struct fat_ioctl_filldir_callback *buf =                           \
+               container_of(ctx, struct fat_ioctl_filldir_callback, ctx); \
        struct dirent_type __user *d1 = buf->dirent;                       \
        struct dirent_type __user *d2 = d1 + 1;                            \
                                                                           \
index 8b9b3775e2e78ca24b56db57d5ec436efc5f6df3..c41d255b6a7b58808d60b205c81ce44f2b0bc75f 100644 (file)
@@ -69,10 +69,12 @@ struct get_name_filldir {
        char *name;
 };
 
-static int get_name_filldir(void *opaque, const char *name, int length,
-                           loff_t offset, u64 inum, unsigned int type)
+static int get_name_filldir(struct dir_context *ctx, const char *name,
+                           int length, loff_t offset, u64 inum,
+                           unsigned int type)
 {
-       struct get_name_filldir *gnfd = opaque;
+       struct get_name_filldir *gnfd =
+               container_of(ctx, struct get_name_filldir, ctx);
 
        if (inum != gnfd->inum.no_addr)
                return 0;
index 4338ff32959d4e9e3414bd9ed184d4d47b5a53fe..5f2755117ce775dea45cb5c2bbc369568f991f29 100644 (file)
@@ -548,10 +548,11 @@ struct hppfs_dirent {
        struct dentry *dentry;
 };
 
-static int hppfs_filldir(void *d, const char *name, int size,
+static int hppfs_filldir(struct dir_context *ctx, const char *name, int size,
                         loff_t offset, u64 inode, unsigned int type)
 {
-       struct hppfs_dirent *dirent = d;
+       struct hppfs_dirent *dirent =
+               container_of(ctx, struct hppfs_dirent, ctx);
 
        if (file_removed(dirent->dentry, name))
                return 0;
index a25490ae6c62dea32e5b5cff447e1f7e027a9778..0e71a0dd58cae43aa0b7780bef44348e56d78504 100644 (file)
@@ -245,10 +245,11 @@ struct nfs4_dir_ctx {
 };
 
 static int
-nfsd4_build_namelist(void *arg, const char *name, int namlen,
+nfsd4_build_namelist(struct dir_context *__ctx, const char *name, int namlen,
                loff_t offset, u64 ino, unsigned int d_type)
 {
-       struct nfs4_dir_ctx *ctx = arg;
+       struct nfs4_dir_ctx *ctx =
+               container_of(__ctx, struct nfs4_dir_ctx, ctx);
        struct name_list *entry;
 
        if (namlen != HEXDIR_LEN - 1)
index 989129e2d6eac69951abf3a6c1f4f9cae9fbb826..161d2d51b6f2d83125e403fe23fac92a4336063b 100644 (file)
@@ -1819,10 +1819,12 @@ struct readdir_data {
        int             full;
 };
 
-static int nfsd_buffered_filldir(void *__buf, const char *name, int namlen,
-                                loff_t offset, u64 ino, unsigned int d_type)
+static int nfsd_buffered_filldir(struct dir_context *ctx, const char *name,
+                                int namlen, loff_t offset, u64 ino,
+                                unsigned int d_type)
 {
-       struct readdir_data *buf = __buf;
+       struct readdir_data *buf =
+               container_of(ctx, struct readdir_data, ctx);
        struct buffered_dirent *de = (void *)(buf->dirent + buf->used);
        unsigned int reclen;
 
@@ -1842,7 +1844,7 @@ static int nfsd_buffered_filldir(void *__buf, const char *name, int namlen,
        return 0;
 }
 
-static __be32 nfsd_buffered_readdir(struct file *file, filldir_t func,
+static __be32 nfsd_buffered_readdir(struct file *file, nfsd_filldir_t func,
                                    struct readdir_cd *cdp, loff_t *offsetp)
 {
        struct buffered_dirent *de;
@@ -1926,7 +1928,7 @@ static __be32 nfsd_buffered_readdir(struct file *file, filldir_t func,
  */
 __be32
 nfsd_readdir(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t *offsetp, 
-            struct readdir_cd *cdp, filldir_t func)
+            struct readdir_cd *cdp, nfsd_filldir_t func)
 {
        __be32          err;
        struct file     *file;
index c2ff3f14e5f6146fc4d0ea72f063d32e615921e4..b1796d6ee538f255707dc676761c063c97d2e189 100644 (file)
@@ -36,7 +36,7 @@
 /*
  * Callback function for readdir
  */
-typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
+typedef int (*nfsd_filldir_t)(void *, const char *, int, loff_t, u64, unsigned);
 
 /* nfsd/vfs.c */
 int            nfsd_racache_init(int);
@@ -95,7 +95,7 @@ __be32                nfsd_rename(struct svc_rqst *,
 __be32         nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type,
                                char *name, int len);
 __be32         nfsd_readdir(struct svc_rqst *, struct svc_fh *,
-                            loff_t *, struct readdir_cd *, filldir_t);
+                            loff_t *, struct readdir_cd *, nfsd_filldir_t);
 __be32         nfsd_statfs(struct svc_rqst *, struct svc_fh *,
                                struct kstatfs *, int access);
 
index 0717662b4aefb4ca4b240ea58daa040c2aaa39e8..c43d9b4a1ec0cbabec58ee104f7e8c5cd4e57e54 100644 (file)
@@ -2073,10 +2073,12 @@ struct ocfs2_empty_dir_priv {
        unsigned seen_other;
        unsigned dx_dir;
 };
-static int ocfs2_empty_dir_filldir(void *priv, const char *name, int name_len,
-                                  loff_t pos, u64 ino, unsigned type)
+static int ocfs2_empty_dir_filldir(struct dir_context *ctx, const char *name,
+                                  int name_len, loff_t pos, u64 ino,
+                                  unsigned type)
 {
-       struct ocfs2_empty_dir_priv *p = priv;
+       struct ocfs2_empty_dir_priv *p =
+               container_of(ctx, struct ocfs2_empty_dir_priv, ctx);
 
        /*
         * Check the positions of "." and ".." records to be sure
index 4b0c68849b3610ec1e448607b376c6545a1738ed..4f502382180f676c518ee44d34cda933a2952b7e 100644 (file)
@@ -1982,10 +1982,12 @@ struct ocfs2_orphan_filldir_priv {
        struct ocfs2_super      *osb;
 };
 
-static int ocfs2_orphan_filldir(void *priv, const char *name, int name_len,
-                               loff_t pos, u64 ino, unsigned type)
+static int ocfs2_orphan_filldir(struct dir_context *ctx, const char *name,
+                               int name_len, loff_t pos, u64 ino,
+                               unsigned type)
 {
-       struct ocfs2_orphan_filldir_priv *p = priv;
+       struct ocfs2_orphan_filldir_priv *p =
+               container_of(ctx, struct ocfs2_orphan_filldir_priv, ctx);
        struct inode *iter;
 
        if (name_len == 1 && !strncmp(".", name, 1))
index 4e9d7c1fea52a98b85e8c3ce04c792b07ef4377a..301f64aa8a45859b067d072b1d93df2ccd7d2f25 100644 (file)
@@ -180,10 +180,12 @@ static void ovl_cache_put(struct ovl_dir_file *od, struct dentry *dentry)
        }
 }
 
-static int ovl_fill_merge(void *buf, const char *name, int namelen,
-                         loff_t offset, u64 ino, unsigned int d_type)
+static int ovl_fill_merge(struct dir_context *ctx, const char *name,
+                         int namelen, loff_t offset, u64 ino,
+                         unsigned int d_type)
 {
-       struct ovl_readdir_data *rdd = buf;
+       struct ovl_readdir_data *rdd =
+               container_of(ctx, struct ovl_readdir_data, ctx);
 
        rdd->count++;
        if (!rdd->is_merge)
index 33fd92208cb75411cae8e30bc972e742e97a6479..ced679179cac0686407c3743cff177289bfc3959 100644 (file)
@@ -74,10 +74,11 @@ struct readdir_callback {
        int result;
 };
 
-static int fillonedir(void * __buf, const char * name, int namlen, loff_t offset,
-                     u64 ino, unsigned int d_type)
+static int fillonedir(struct dir_context *ctx, const char *name, int namlen,
+                     loff_t offset, u64 ino, unsigned int d_type)
 {
-       struct readdir_callback *buf = (struct readdir_callback *) __buf;
+       struct readdir_callback *buf =
+               container_of(ctx, struct readdir_callback, ctx);
        struct old_linux_dirent __user * dirent;
        unsigned long d_ino;
 
@@ -148,11 +149,12 @@ struct getdents_callback {
        int error;
 };
 
-static int filldir(void * __buf, const char * name, int namlen, loff_t offset,
-                  u64 ino, unsigned int d_type)
+static int filldir(struct dir_context *ctx, const char *name, int namlen,
+                  loff_t offset, u64 ino, unsigned int d_type)
 {
        struct linux_dirent __user * dirent;
-       struct getdents_callback * buf = (struct getdents_callback *) __buf;
+       struct getdents_callback *buf =
+               container_of(ctx, struct getdents_callback, ctx);
        unsigned long d_ino;
        int reclen = ALIGN(offsetof(struct linux_dirent, d_name) + namlen + 2,
                sizeof(long));
@@ -232,11 +234,12 @@ struct getdents_callback64 {
        int error;
 };
 
-static int filldir64(void * __buf, const char * name, int namlen, loff_t offset,
-                    u64 ino, unsigned int d_type)
+static int filldir64(struct dir_context *ctx, const char *name, int namlen,
+                    loff_t offset, u64 ino, unsigned int d_type)
 {
        struct linux_dirent64 __user *dirent;
-       struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf;
+       struct getdents_callback64 *buf =
+               container_of(ctx, struct getdents_callback64, ctx);
        int reclen = ALIGN(offsetof(struct linux_dirent64, d_name) + namlen + 1,
                sizeof(u64));
 
index 7c36898af40266995be056b1a6b1b168be831e4b..628248ce2f8b86e32653699a7c8c3bdd46537405 100644 (file)
@@ -188,10 +188,11 @@ struct reiserfs_dentry_buf {
 };
 
 static int
-fill_with_dentries(void *buf, const char *name, int namelen, loff_t offset,
-                   u64 ino, unsigned int d_type)
+fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
+                  loff_t offset, u64 ino, unsigned int d_type)
 {
-       struct reiserfs_dentry_buf *dbuf = buf;
+       struct reiserfs_dentry_buf *dbuf =
+               container_of(ctx, struct reiserfs_dentry_buf, ctx);
        struct dentry *dentry;
 
        WARN_ON_ONCE(!mutex_is_locked(&dbuf->xadir->d_inode->i_mutex));
@@ -824,10 +825,12 @@ struct listxattr_buf {
        struct dentry *dentry;
 };
 
-static int listxattr_filler(void *buf, const char *name, int namelen,
-                           loff_t offset, u64 ino, unsigned int d_type)
+static int listxattr_filler(struct dir_context *ctx, const char *name,
+                           int namelen, loff_t offset, u64 ino,
+                           unsigned int d_type)
 {
-       struct listxattr_buf *b = (struct listxattr_buf *)buf;
+       struct listxattr_buf *b =
+               container_of(ctx, struct listxattr_buf, ctx);
        size_t size;
 
        if (name[0] != '.' ||
index 9ab779e8a63ccd7785637dd9017fc3bc69ff260f..00c8e4f65cb6aaa32eb2851d1a0e71cc59c3c09c 100644 (file)
@@ -1467,7 +1467,10 @@ int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
  * This allows the kernel to read directories into kernel space or
  * to have different dirent layouts depending on the binary type.
  */
-typedef int (*filldir_t)(void *, const char *, int, loff_t, u64, unsigned);
+struct dir_context;
+typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64,
+                        unsigned);
+
 struct dir_context {
        const filldir_t actor;
        loff_t pos;