struct dentry *child);
-static int exportfs_get_name(struct vfsmount *mnt, struct dentry *dir,
- char *name, struct dentry *child)
+int exportfs_get_name(struct vfsmount *mnt, struct dentry *dir,
+ char *name, struct dentry *child)
{
const struct export_operations *nop = dir->d_sb->s_export_op;
else
return get_name(mnt, dir, name, child);
}
+EXPORT_SYMBOL_GPL(exportfs_get_name);
/*
* Check if the dentry or any of it's aliases is acceptable.
#define is_anon(d) ((d)->d_flags & DCACHE_DISCONNECTED)
-extern struct export_operations export_op_default;
-
static struct dentry *__get_parent(struct super_block *sb,
struct dentry *odf_dentry)
{
res = odf_root->d_sb->s_export_op->get_name(
UNIONFS_D(parent)->odf.dentry,
name, d);
- else
- res = export_op_default.get_name(
+ else {
+ res = exportfs_get_name(
+ NULL, /* NULL mnt is wrong! */
UNIONFS_D(parent)->odf.dentry,
name, d);
+ BUG();
+ /*
+ * FIXME: we're passing a null mnt above,
+ * which is wrong. We need to pass a real
+ * mnt. But first, we need to change struct
+ * odf_dentry_info so that it'll record a
+ * struct path instead of just a dentry.
+ * That struct path will include both a
+ * dentry and mnt, which have to be dget/put
+ * and mntget/put properly. -ezk
+ */
+ }
}
else
strncpy(name, d->d_name.name, d->d_name.len);
extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
int fh_len, int fileid_type, int (*acceptable)(void *, struct dentry *),
void *context);
+extern int exportfs_get_name(struct vfsmount *mnt, struct dentry *dir,
+ char *name, struct dentry *child);
/*
* Generic helpers for filesystems.