vfs: make first argument of dir_context.actor typed
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
9f2f7d4c8d
commit
ac7576f4b1
@ -104,11 +104,12 @@ struct osf_dirent_callback {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
osf_filldir(void *__buf, const char *name, int namlen, loff_t offset,
|
osf_filldir(struct dir_context *ctx, const char *name, int namlen,
|
||||||
u64 ino, unsigned int d_type)
|
loff_t offset, u64 ino, unsigned int d_type)
|
||||||
{
|
{
|
||||||
struct osf_dirent __user *dirent;
|
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 reclen = ALIGN(NAME_OFFSET + namlen + 1, sizeof(u32));
|
||||||
unsigned int d_ino;
|
unsigned int d_ino;
|
||||||
|
|
||||||
|
@ -56,11 +56,12 @@ struct getdents_callback {
|
|||||||
|
|
||||||
#define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
|
#define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
|
||||||
|
|
||||||
static int filldir(void * __buf, const char * name, int namlen, loff_t offset,
|
static int filldir(struct dir_context *ctx, const char *name, int namlen,
|
||||||
u64 ino, unsigned d_type)
|
loff_t offset, u64 ino, unsigned d_type)
|
||||||
{
|
{
|
||||||
struct hpux_dirent __user * dirent;
|
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;
|
ino_t d_ino;
|
||||||
int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 1, sizeof(long));
|
int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 1, sizeof(long));
|
||||||
|
|
||||||
|
@ -207,13 +207,15 @@ static int ll_encode_fh(struct inode *inode, __u32 *fh, int *plen,
|
|||||||
return LUSTRE_NFS_FID;
|
return LUSTRE_NFS_FID;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ll_nfs_get_name_filldir(void *cookie, const char *name, int namelen,
|
static int ll_nfs_get_name_filldir(struct dir_context *ctx, const char *name,
|
||||||
loff_t hash, u64 ino, unsigned type)
|
int namelen, loff_t hash, u64 ino,
|
||||||
|
unsigned type)
|
||||||
{
|
{
|
||||||
/* It is hack to access lde_fid for comparison with lgd_fid.
|
/* It is hack to access lde_fid for comparison with lgd_fid.
|
||||||
* So the input 'name' must be part of the 'lu_dirent'. */
|
* So the input 'name' must be part of the 'lu_dirent'. */
|
||||||
struct lu_dirent *lde = container_of0(name, struct lu_dirent, lde_name);
|
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;
|
struct lu_fid fid;
|
||||||
|
|
||||||
fid_le_to_cpu(&fid, &lde->lde_fid);
|
fid_le_to_cpu(&fid, &lde->lde_fid);
|
||||||
|
@ -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_revalidate(struct dentry *dentry, unsigned int flags);
|
||||||
static int afs_d_delete(const struct dentry *dentry);
|
static int afs_d_delete(const struct dentry *dentry);
|
||||||
static void afs_d_release(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);
|
loff_t fpos, u64 ino, unsigned dtype);
|
||||||
static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
|
static int afs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
|
||||||
bool excl);
|
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
|
* - if afs_dir_iterate_block() spots this function, it'll pass the FID
|
||||||
* uniquifier through dtype
|
* uniquifier through dtype
|
||||||
*/
|
*/
|
||||||
static int afs_lookup_filldir(void *_cookie, const char *name, int nlen,
|
static int afs_lookup_filldir(struct dir_context *ctx, const char *name,
|
||||||
loff_t fpos, u64 ino, unsigned dtype)
|
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",
|
_enter("{%s,%u},%s,%u,,%llu,%u",
|
||||||
cookie->name.name, cookie->name.len, name, nlen,
|
cookie->name.name, cookie->name.len, name, nlen,
|
||||||
|
21
fs/compat.c
21
fs/compat.c
@ -847,10 +847,12 @@ struct compat_readdir_callback {
|
|||||||
int result;
|
int result;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int compat_fillonedir(void *__buf, const char *name, int namlen,
|
static int compat_fillonedir(struct dir_context *ctx, const char *name,
|
||||||
loff_t offset, u64 ino, unsigned int d_type)
|
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;
|
struct compat_old_linux_dirent __user *dirent;
|
||||||
compat_ulong_t d_ino;
|
compat_ulong_t d_ino;
|
||||||
|
|
||||||
@ -915,11 +917,12 @@ struct compat_getdents_callback {
|
|||||||
int error;
|
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)
|
loff_t offset, u64 ino, unsigned int d_type)
|
||||||
{
|
{
|
||||||
struct compat_linux_dirent __user * dirent;
|
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;
|
compat_ulong_t d_ino;
|
||||||
int reclen = ALIGN(offsetof(struct compat_linux_dirent, d_name) +
|
int reclen = ALIGN(offsetof(struct compat_linux_dirent, d_name) +
|
||||||
namlen + 2, sizeof(compat_long_t));
|
namlen + 2, sizeof(compat_long_t));
|
||||||
@ -1001,11 +1004,13 @@ struct compat_getdents_callback64 {
|
|||||||
int error;
|
int error;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t offset,
|
static int compat_filldir64(struct dir_context *ctx, const char *name,
|
||||||
u64 ino, unsigned int d_type)
|
int namlen, loff_t offset, u64 ino,
|
||||||
|
unsigned int d_type)
|
||||||
{
|
{
|
||||||
struct linux_dirent64 __user *dirent;
|
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,
|
int reclen = ALIGN(offsetof(struct linux_dirent64, d_name) + namlen + 1,
|
||||||
sizeof(u64));
|
sizeof(u64));
|
||||||
u64 off;
|
u64 off;
|
||||||
|
@ -75,11 +75,11 @@ struct ecryptfs_getdents_callback {
|
|||||||
|
|
||||||
/* Inspired by generic filldir in fs/readdir.c */
|
/* Inspired by generic filldir in fs/readdir.c */
|
||||||
static int
|
static int
|
||||||
ecryptfs_filldir(void *dirent, const char *lower_name, int lower_namelen,
|
ecryptfs_filldir(struct dir_context *ctx, const char *lower_name,
|
||||||
loff_t offset, u64 ino, unsigned int d_type)
|
int lower_namelen, loff_t offset, u64 ino, unsigned int d_type)
|
||||||
{
|
{
|
||||||
struct ecryptfs_getdents_callback *buf =
|
struct ecryptfs_getdents_callback *buf =
|
||||||
(struct ecryptfs_getdents_callback *)dirent;
|
container_of(ctx, struct ecryptfs_getdents_callback, ctx);
|
||||||
size_t name_size;
|
size_t name_size;
|
||||||
char *name;
|
char *name;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -241,10 +241,11 @@ struct getdents_callback {
|
|||||||
* A rather strange filldir function to capture
|
* A rather strange filldir function to capture
|
||||||
* the name matching the specified inode number.
|
* 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)
|
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;
|
int result = 0;
|
||||||
|
|
||||||
buf->sequence++;
|
buf->sequence++;
|
||||||
|
@ -702,10 +702,11 @@ static int fat_readdir(struct file *file, struct dir_context *ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define FAT_IOCTL_FILLDIR_FUNC(func, dirent_type) \
|
#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) \
|
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 *d1 = buf->dirent; \
|
||||||
struct dirent_type __user *d2 = d1 + 1; \
|
struct dirent_type __user *d2 = d1 + 1; \
|
||||||
\
|
\
|
||||||
|
@ -69,10 +69,12 @@ struct get_name_filldir {
|
|||||||
char *name;
|
char *name;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int get_name_filldir(void *opaque, const char *name, int length,
|
static int get_name_filldir(struct dir_context *ctx, const char *name,
|
||||||
loff_t offset, u64 inum, unsigned int type)
|
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)
|
if (inum != gnfd->inum.no_addr)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -548,10 +548,11 @@ struct hppfs_dirent {
|
|||||||
struct dentry *dentry;
|
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)
|
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))
|
if (file_removed(dirent->dentry, name))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -245,10 +245,11 @@ struct nfs4_dir_ctx {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int
|
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)
|
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;
|
struct name_list *entry;
|
||||||
|
|
||||||
if (namlen != HEXDIR_LEN - 1)
|
if (namlen != HEXDIR_LEN - 1)
|
||||||
|
@ -1819,10 +1819,12 @@ struct readdir_data {
|
|||||||
int full;
|
int full;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int nfsd_buffered_filldir(void *__buf, const char *name, int namlen,
|
static int nfsd_buffered_filldir(struct dir_context *ctx, const char *name,
|
||||||
loff_t offset, u64 ino, unsigned int d_type)
|
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);
|
struct buffered_dirent *de = (void *)(buf->dirent + buf->used);
|
||||||
unsigned int reclen;
|
unsigned int reclen;
|
||||||
|
|
||||||
@ -1842,7 +1844,7 @@ static int nfsd_buffered_filldir(void *__buf, const char *name, int namlen,
|
|||||||
return 0;
|
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 readdir_cd *cdp, loff_t *offsetp)
|
||||||
{
|
{
|
||||||
struct buffered_dirent *de;
|
struct buffered_dirent *de;
|
||||||
@ -1926,7 +1928,7 @@ static __be32 nfsd_buffered_readdir(struct file *file, filldir_t func,
|
|||||||
*/
|
*/
|
||||||
__be32
|
__be32
|
||||||
nfsd_readdir(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t *offsetp,
|
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;
|
__be32 err;
|
||||||
struct file *file;
|
struct file *file;
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
/*
|
/*
|
||||||
* Callback function for readdir
|
* 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 */
|
/* nfsd/vfs.c */
|
||||||
int nfsd_racache_init(int);
|
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,
|
__be32 nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type,
|
||||||
char *name, int len);
|
char *name, int len);
|
||||||
__be32 nfsd_readdir(struct svc_rqst *, struct svc_fh *,
|
__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 *,
|
__be32 nfsd_statfs(struct svc_rqst *, struct svc_fh *,
|
||||||
struct kstatfs *, int access);
|
struct kstatfs *, int access);
|
||||||
|
|
||||||
|
@ -2073,10 +2073,12 @@ struct ocfs2_empty_dir_priv {
|
|||||||
unsigned seen_other;
|
unsigned seen_other;
|
||||||
unsigned dx_dir;
|
unsigned dx_dir;
|
||||||
};
|
};
|
||||||
static int ocfs2_empty_dir_filldir(void *priv, const char *name, int name_len,
|
static int ocfs2_empty_dir_filldir(struct dir_context *ctx, const char *name,
|
||||||
loff_t pos, u64 ino, unsigned type)
|
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
|
* Check the positions of "." and ".." records to be sure
|
||||||
|
@ -1982,10 +1982,12 @@ struct ocfs2_orphan_filldir_priv {
|
|||||||
struct ocfs2_super *osb;
|
struct ocfs2_super *osb;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int ocfs2_orphan_filldir(void *priv, const char *name, int name_len,
|
static int ocfs2_orphan_filldir(struct dir_context *ctx, const char *name,
|
||||||
loff_t pos, u64 ino, unsigned type)
|
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;
|
struct inode *iter;
|
||||||
|
|
||||||
if (name_len == 1 && !strncmp(".", name, 1))
|
if (name_len == 1 && !strncmp(".", name, 1))
|
||||||
|
@ -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,
|
static int ovl_fill_merge(struct dir_context *ctx, const char *name,
|
||||||
loff_t offset, u64 ino, unsigned int d_type)
|
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++;
|
rdd->count++;
|
||||||
if (!rdd->is_merge)
|
if (!rdd->is_merge)
|
||||||
|
21
fs/readdir.c
21
fs/readdir.c
@ -74,10 +74,11 @@ struct readdir_callback {
|
|||||||
int result;
|
int result;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int fillonedir(void * __buf, const char * name, int namlen, loff_t offset,
|
static int fillonedir(struct dir_context *ctx, const char *name, int namlen,
|
||||||
u64 ino, unsigned int d_type)
|
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;
|
struct old_linux_dirent __user * dirent;
|
||||||
unsigned long d_ino;
|
unsigned long d_ino;
|
||||||
|
|
||||||
@ -148,11 +149,12 @@ struct getdents_callback {
|
|||||||
int error;
|
int error;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int filldir(void * __buf, const char * name, int namlen, loff_t offset,
|
static int filldir(struct dir_context *ctx, const char *name, int namlen,
|
||||||
u64 ino, unsigned int d_type)
|
loff_t offset, u64 ino, unsigned int d_type)
|
||||||
{
|
{
|
||||||
struct linux_dirent __user * dirent;
|
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;
|
unsigned long d_ino;
|
||||||
int reclen = ALIGN(offsetof(struct linux_dirent, d_name) + namlen + 2,
|
int reclen = ALIGN(offsetof(struct linux_dirent, d_name) + namlen + 2,
|
||||||
sizeof(long));
|
sizeof(long));
|
||||||
@ -232,11 +234,12 @@ struct getdents_callback64 {
|
|||||||
int error;
|
int error;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int filldir64(void * __buf, const char * name, int namlen, loff_t offset,
|
static int filldir64(struct dir_context *ctx, const char *name, int namlen,
|
||||||
u64 ino, unsigned int d_type)
|
loff_t offset, u64 ino, unsigned int d_type)
|
||||||
{
|
{
|
||||||
struct linux_dirent64 __user *dirent;
|
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,
|
int reclen = ALIGN(offsetof(struct linux_dirent64, d_name) + namlen + 1,
|
||||||
sizeof(u64));
|
sizeof(u64));
|
||||||
|
|
||||||
|
@ -188,10 +188,11 @@ struct reiserfs_dentry_buf {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
fill_with_dentries(void *buf, const char *name, int namelen, loff_t offset,
|
fill_with_dentries(struct dir_context *ctx, const char *name, int namelen,
|
||||||
u64 ino, unsigned int d_type)
|
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;
|
struct dentry *dentry;
|
||||||
|
|
||||||
WARN_ON_ONCE(!mutex_is_locked(&dbuf->xadir->d_inode->i_mutex));
|
WARN_ON_ONCE(!mutex_is_locked(&dbuf->xadir->d_inode->i_mutex));
|
||||||
@ -824,10 +825,12 @@ struct listxattr_buf {
|
|||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int listxattr_filler(void *buf, const char *name, int namelen,
|
static int listxattr_filler(struct dir_context *ctx, const char *name,
|
||||||
loff_t offset, u64 ino, unsigned int d_type)
|
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;
|
size_t size;
|
||||||
|
|
||||||
if (name[0] != '.' ||
|
if (name[0] != '.' ||
|
||||||
|
@ -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
|
* This allows the kernel to read directories into kernel space or
|
||||||
* to have different dirent layouts depending on the binary type.
|
* 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 {
|
struct dir_context {
|
||||||
const filldir_t actor;
|
const filldir_t actor;
|
||||||
loff_t pos;
|
loff_t pos;
|
||||||
|
Loading…
Reference in New Issue
Block a user