Commit 0378c405 authored by Al Viro's avatar Al Viro

switch ncpfs

merge dentry_operations for root and non-root
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 98cd3fb0
...@@ -82,7 +82,7 @@ static int ncp_compare_dentry(const struct dentry *, const struct inode *, ...@@ -82,7 +82,7 @@ static int ncp_compare_dentry(const struct dentry *, const struct inode *,
unsigned int, const char *, const struct qstr *); unsigned int, const char *, const struct qstr *);
static int ncp_delete_dentry(const struct dentry *); static int ncp_delete_dentry(const struct dentry *);
static const struct dentry_operations ncp_dentry_operations = const struct dentry_operations ncp_dentry_operations =
{ {
.d_revalidate = ncp_lookup_validate, .d_revalidate = ncp_lookup_validate,
.d_hash = ncp_hash_dentry, .d_hash = ncp_hash_dentry,
...@@ -90,14 +90,6 @@ static const struct dentry_operations ncp_dentry_operations = ...@@ -90,14 +90,6 @@ static const struct dentry_operations ncp_dentry_operations =
.d_delete = ncp_delete_dentry, .d_delete = ncp_delete_dentry,
}; };
const struct dentry_operations ncp_root_dentry_operations =
{
.d_hash = ncp_hash_dentry,
.d_compare = ncp_compare_dentry,
.d_delete = ncp_delete_dentry,
};
#define ncp_namespace(i) (NCP_SERVER(i)->name_space[NCP_FINFO(i)->volNumber]) #define ncp_namespace(i) (NCP_SERVER(i)->name_space[NCP_FINFO(i)->volNumber])
static inline int ncp_preserve_entry_case(struct inode *i, __u32 nscreator) static inline int ncp_preserve_entry_case(struct inode *i, __u32 nscreator)
...@@ -309,6 +301,9 @@ ncp_lookup_validate(struct dentry *dentry, struct nameidata *nd) ...@@ -309,6 +301,9 @@ ncp_lookup_validate(struct dentry *dentry, struct nameidata *nd)
int res, val = 0, len; int res, val = 0, len;
__u8 __name[NCP_MAXPATHLEN + 1]; __u8 __name[NCP_MAXPATHLEN + 1];
if (dentry == dentry->d_sb->s_root)
return 1;
if (nd->flags & LOOKUP_RCU) if (nd->flags & LOOKUP_RCU)
return -ECHILD; return -ECHILD;
...@@ -637,7 +632,6 @@ ncp_fill_cache(struct file *filp, void *dirent, filldir_t filldir, ...@@ -637,7 +632,6 @@ ncp_fill_cache(struct file *filp, void *dirent, filldir_t filldir,
entry->ino = iunique(dir->i_sb, 2); entry->ino = iunique(dir->i_sb, 2);
inode = ncp_iget(dir->i_sb, entry); inode = ncp_iget(dir->i_sb, entry);
if (inode) { if (inode) {
d_set_d_op(newdent, &ncp_dentry_operations);
d_instantiate(newdent, inode); d_instantiate(newdent, inode);
if (!hashed) if (!hashed)
d_rehash(newdent); d_rehash(newdent);
...@@ -893,7 +887,6 @@ static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, struc ...@@ -893,7 +887,6 @@ static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, struc
if (inode) { if (inode) {
ncp_new_dentry(dentry); ncp_new_dentry(dentry);
add_entry: add_entry:
d_set_d_op(dentry, &ncp_dentry_operations);
d_add(dentry, inode); d_add(dentry, inode);
error = 0; error = 0;
} }
......
...@@ -544,6 +544,7 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent) ...@@ -544,6 +544,7 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent)
sb->s_blocksize_bits = 10; sb->s_blocksize_bits = 10;
sb->s_magic = NCP_SUPER_MAGIC; sb->s_magic = NCP_SUPER_MAGIC;
sb->s_op = &ncp_sops; sb->s_op = &ncp_sops;
sb->s_d_op = &ncp_dentry_operations;
sb->s_bdi = &server->bdi; sb->s_bdi = &server->bdi;
server = NCP_SBP(sb); server = NCP_SBP(sb);
...@@ -723,7 +724,6 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent) ...@@ -723,7 +724,6 @@ static int ncp_fill_super(struct super_block *sb, void *raw_data, int silent)
sb->s_root = d_alloc_root(root_inode); sb->s_root = d_alloc_root(root_inode);
if (!sb->s_root) if (!sb->s_root)
goto out_no_root; goto out_no_root;
d_set_d_op(sb->s_root, &ncp_root_dentry_operations);
return 0; return 0;
out_no_root: out_no_root:
......
...@@ -204,7 +204,7 @@ void ncp_update_inode2(struct inode *, struct ncp_entry_info *); ...@@ -204,7 +204,7 @@ void ncp_update_inode2(struct inode *, struct ncp_entry_info *);
/* linux/fs/ncpfs/dir.c */ /* linux/fs/ncpfs/dir.c */
extern const struct inode_operations ncp_dir_inode_operations; extern const struct inode_operations ncp_dir_inode_operations;
extern const struct file_operations ncp_dir_operations; extern const struct file_operations ncp_dir_operations;
extern const struct dentry_operations ncp_root_dentry_operations; extern const struct dentry_operations ncp_dentry_operations;
int ncp_conn_logged_in(struct super_block *); int ncp_conn_logged_in(struct super_block *);
int ncp_date_dos2unix(__le16 time, __le16 date); int ncp_date_dos2unix(__le16 time, __le16 date);
void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date); void ncp_date_unix2dos(int unix_date, __le16 * time, __le16 * date);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment