Hello again,
For information: I tried
adding the needed callbacks, deriving them from the generic implementations,
and so far, it seems to be mostly working.
i.e. I added the code
included below this mail in the file yaffs_fs.c
Please let me know what
you think of this fix and/or if you’d have a better one…
Thanks for your reading,
Best wishes,
Jean-Loup
PS: Here is the added
code to yaffs_fs.c
static struct inode *
yaffs2_nfs_get_inode(struct super_block *sb,
uint64_t ino, uint32_t generation)
{
return yaffs_iget(sb,
ino);
}
static struct dentry *
yaffs2_fh_to_dentry(struct super_block *sb,
struct fid *fid, int fh_len, int fh_type)
{
return
generic_fh_to_dentry(sb, fid, fh_len, fh_type, yaffs2_nfs_get_inode) ;
}
static struct dentry *
yaffs2_fh_to_parent(struct super_block *sb,
struct fid *fid, int fh_len, int fh_type)
{
return
generic_fh_to_parent(sb, fid, fh_len, fh_type, yaffs2_nfs_get_inode);
}
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,9))
/* Just declare a zero structure as a NULL value implies
* using the default functions of expfs.
*/
static struct export_operations yaffs_export_ops =
{
.fh_to_dentry = yaffs2_fh_to_dentry,
.fh_to_parent = yaffs2_fh_to_parent,
// .get_parent = yaffs2_get_parent,
} ;
#endif
De : Jean-Loup
Sabatier
Envoyé : mardi 1
juillet 2008 17:28
À :
yaffs@lists.aleph1.co.uk
Objet : [YAFFS] NFS export
with YAFFS2
Good morning, all,
I'd need some advice and information
about a problem I've got with NFS and YAFFS2…
We are trying to export a YAFFS2
partition through an NFS export...
When you try to do so with a standard
YAFFS2 on a Linux version greater than 2.6, you get the following error
message:
"exp_export: export of invalid
fs type."
To allow the NFS
export, with Linux 2.6.16, you only had to make 2 minor changes in yaffs_fs.c :
1) Add an empty struct :
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,9))
/*
Just declare a zero structure as a NULL value implies
* using the default functions of expfs.
*/
static
struct export_operations yaffs_export_ops ;
#endif
2) And to make sure that the
superblock points at it by adding a line into
"yaffs_internal_read_super"
#if
(LINUX_VERSION_CODE > KERNEL_VERSION(2,5,9))
sb->s_export_op = &yaffs_export_ops;
#endif
However, on a
kernel 2.6.25, it gets tricky: We need to define 3 callback functions in the
struct export_operations:
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,9))
/*
Just declare a zero structure as a NULL value implies
* using the default functions of expfs.
*/
static
struct export_operations yaffs_export_ops =
{
.fh_to_dentry = yaffs2_fh_to_dentry,
.fh_to_parent = yaffs2_fh_to_parent,
.get_parent = yaffs2_get_parent
} ;
#endif
The generic implementation of the
callback functions (.fh_to_dentry,
.fh_to_parent, .get_parent) does not work.
Anyone has an idea about how to
implement these functions?
Thank you very much for your reading
and thanks in advance for your advices,
Regards,
Jean-Loup Sabatier