The patch titled hfs+: add basic export support has been removed from the -mm tree. Its filename was hfs-add-basic-export-support.patch This patch was dropped because an updated version will be merged The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: hfs+: add basic export support From: "Diego Elio 'Flameeyes' Pettenò" <flameeyes@xxxxxxxxx> The function's skeleton is taken from ext2/super.c and seems to work fine for R/W access to HFS+ non-journaled case-sensitive filesystems. It's probably slow and has a lot of space for improvement but it's still better than having no hope to export HFS+ filesystems. Signed-off-by: "Diego Elio 'Flameeyes' Pettenò" <flameeyes@xxxxxxxxx> Cc: Roman Zippel <zippel@xxxxxxxxxxxxxx> Cc: Christoph Hellwig <hch@xxxxxx> Cc: Neil Brown <neilb@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/hfsplus/super.c | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff -puN fs/hfsplus/super.c~hfs-add-basic-export-support fs/hfsplus/super.c --- a/fs/hfsplus/super.c~hfs-add-basic-export-support +++ a/fs/hfsplus/super.c @@ -11,6 +11,7 @@ #include <linux/init.h> #include <linux/pagemap.h> #include <linux/fs.h> +#include <linux/exportfs.h> #include <linux/slab.h> #include <linux/vfs.h> #include <linux/nls.h> @@ -287,6 +288,53 @@ static const struct super_operations hfs .show_options = hfsplus_show_options, }; +static struct inode *hfsplus_export_get_inode(struct super_block *sb, + u64 ino, u32 generation) +{ + struct inode *inode; + + if (ino < HFSPLUS_FIRSTUSER_CNID && ino != HFSPLUS_ROOT_CNID) + return ERR_PTR(-ESTALE); + + /* iget isn't really right if the inode is currently unallocated!! + */ + inode = hfsplus_iget(sb, ino); + if (IS_ERR(inode)) + return ERR_CAST(inode); + if (generation && inode->i_generation != generation) { + /* we didn't find the right inode.. */ + iput(inode); + return ERR_PTR(-ESTALE); + } + return inode; +} + +static struct dentry *hfsplus_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, + hfsplus_export_get_inode); +} + +static struct dentry *hfsplus_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, + hfsplus_export_get_inode); +} + +/* Yes, most of these are left as NULL!! + * A NULL value implies the default, which (hopefully) works with + * hfs+-like file systems, but can be improved upon. + * Currently only fh_to_dentry is required. + */ +static const struct export_operations hfsplus_export_ops = { + .fh_to_dentry = hfsplus_fh_to_dentry, + .fh_to_parent = hfsplus_fh_to_parent, +}; + static int hfsplus_fill_super(struct super_block *sb, void *data, int silent) { struct hfsplus_vh *vhdr; @@ -351,6 +399,7 @@ static int hfsplus_fill_super(struct sup /* Set up operations so we can load metadata */ sb->s_op = &hfsplus_sops; + sb->s_export_op = &hfsplus_export_ops; sb->s_maxbytes = MAX_LFS_FILESIZE; if (!(vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_UNMNT))) { _ Patches currently in -mm which might be from flameeyes@xxxxxxxxx are hfs-add-basic-export-support.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html