@@ -1516,12 +1516,6 @@ static int configfs_dir_close(struct inode *inode, struct file *file)
return 0;
}
-/* Relationship between s_mode and the DT_xxx types */
-static inline unsigned char dt_type(struct configfs_dirent *sd)
-{
- return (sd->s_mode >> 12) & 15;
-}
-
static int configfs_readdir(struct file *file, struct dir_context *ctx)
{
struct dentry *dentry = file->f_path.dentry;
@@ -1574,7 +1568,7 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
if (!inode)
ino = iunique(sb, 2);
- if (!dir_emit(ctx, name, len, ino, dt_type(next)))
+ if (!dir_emit(ctx, name, len, ino, DT_TYPE(next->s_mode)))
return 0;
spin_lock(&configfs_dirent_lock);
@@ -1367,12 +1367,6 @@ int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
return error;
}
-/* Relationship between s_mode and the DT_xxx types */
-static inline unsigned char dt_type(struct kernfs_node *kn)
-{
- return (kn->mode >> 12) & 15;
-}
-
static int kernfs_dir_fop_release(struct inode *inode, struct file *filp)
{
kernfs_put(filp->private_data);
@@ -1447,7 +1441,7 @@ static int kernfs_fop_readdir(struct file *file, struct dir_context *ctx)
pos;
pos = kernfs_dir_next_pos(ns, parent, ctx->pos, pos)) {
const char *name = pos->name;
- unsigned int type = dt_type(pos);
+ unsigned int type = DT_TYPE(pos->mode);
int len = strlen(name);
ino_t ino = pos->ino;
@@ -129,12 +129,6 @@ loff_t dcache_dir_lseek(struct file *file, loff_t offset, int whence)
}
EXPORT_SYMBOL(dcache_dir_lseek);
-/* Relationship between i_mode and the DT_xxx types */
-static inline unsigned char dt_type(struct inode *inode)
-{
- return (inode->i_mode >> 12) & 15;
-}
-
/*
* Directory is locked and all positive dentries in it are safe, since
* for ramfs-type trees they can't go away without unlink() or rmdir(),
@@ -164,7 +158,8 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
spin_unlock(&next->d_lock);
spin_unlock(&dentry->d_lock);
if (!dir_emit(ctx, next->d_name.name, next->d_name.len,
- d_inode(next)->i_ino, dt_type(d_inode(next))))
+ d_inode(next)->i_ino,
+ DT_TYPE(d_inode(next)->i_mode)))
return 0;
spin_lock(&dentry->d_lock);
spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
@@ -386,7 +386,7 @@ static int logfs_write_dir(struct inode *dir, struct dentry *dentry,
dd = kmap_atomic(page);
memset(dd, 0, sizeof(*dd));
dd->ino = cpu_to_be64(inode->i_ino);
- dd->type = logfs_type(inode);
+ dd->type = DT_TYPE(inode->i_mode);
logfs_set_name(dd, &dentry->d_name);
kunmap_atomic(dd);
@@ -640,7 +640,7 @@ static int logfs_replace_inode(struct inode *dir, struct dentry *dentry,
if (err)
return err;
dd->ino = cpu_to_be64(inode->i_ino);
- dd->type = logfs_type(inode);
+ dd->type = DT_TYPE(inode->i_mode);
err = write_dir(dir, dd, pos);
if (err)
@@ -655,11 +655,6 @@ static inline __be32 logfs_crc32(void *data, size_t len, size_t skip)
return cpu_to_be32(crc32(~0, data+skip, len-skip));
}
-static inline u8 logfs_type(struct inode *inode)
-{
- return (inode->i_mode >> 12) & 15;
-}
-
static inline pgoff_t logfs_index(struct super_block *sb, u64 pos)
{
return pos >> sb->s_blocksize_bits;
@@ -652,15 +652,6 @@ unsigned int nfs_page_length(struct page *page)
}
/*
- * Convert a umode to a dirent->d_type
- */
-static inline
-unsigned char nfs_umode_to_dtype(umode_t mode)
-{
- return (mode >> 12) & 15;
-}
-
-/*
* Determine the number of pages in an array of length 'len' and
* with a base offset of 'base'
*/
@@ -1986,7 +1986,7 @@ int nfs3_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
if (unlikely(error))
return error;
if (entry->fattr->valid & NFS_ATTR_FATTR_V3)
- entry->d_type = nfs_umode_to_dtype(entry->fattr->mode);
+ entry->d_type = DT_TYPE(entry->fattr->mode);
if (entry->fattr->fileid != entry->ino) {
entry->fattr->mounted_on_fileid = entry->ino;
@@ -7359,7 +7359,7 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
entry->d_type = DT_UNKNOWN;
if (entry->fattr->valid & NFS_ATTR_FATTR_TYPE)
- entry->d_type = nfs_umode_to_dtype(entry->fattr->mode);
+ entry->d_type = DT_TYPE(entry->fattr->mode);
return 0;
@@ -100,7 +100,7 @@ DECLARE_EVENT_CLASS(nfs_inode_event_done,
__entry->dev = inode->i_sb->s_dev;
__entry->fileid = nfsi->fileid;
__entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
- __entry->type = nfs_umode_to_dtype(inode->i_mode);
+ __entry->type = DT_TYPE(inode->i_mode);
__entry->version = inode->i_version;
__entry->size = i_size_read(inode);
__entry->nfsi_flags = nfsi->flags;
@@ -1552,6 +1552,8 @@ int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
#define DT_SOCK 12
#define DT_WHT 14
+#define DT_TYPE(i_mode) ((unsigned char)(i_mode >> 12) & 15)
+
/*
* This is the "filldir" function type, used by readdir() to let
* the kernel specify what kind of dirent layout it wants to have.
The same umode -> DT calculation existed in different filesystems. Signed-off-by: Fabian Frederick <fabf@skynet.be> --- fs/configfs/dir.c | 8 +------- fs/kernfs/dir.c | 8 +------- fs/libfs.c | 9 ++------- fs/logfs/dir.c | 4 ++-- fs/logfs/logfs.h | 5 ----- fs/nfs/internal.h | 9 --------- fs/nfs/nfs3xdr.c | 2 +- fs/nfs/nfs4xdr.c | 2 +- fs/nfs/nfstrace.h | 2 +- include/linux/fs.h | 2 ++ 10 files changed, 11 insertions(+), 40 deletions(-)