Loading fs/ntfs/ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,9 @@ ToDo/Notes: mft record for resident attributes (fs/ntfs/inode.c). - Small readability cleanup to use "a" instead of "ctx->attr" everywhere (fs/ntfs/inode.c). - Make fs/ntfs/namei.c::ntfs_get_{parent,dentry} static and move the definition of ntfs_export_ops from fs/ntfs/super.c to namei.c. Also, declare ntfs_export_ops in fs/ntfs/ntfs.h. 2.1.22 - Many bug and race fixes and error handling improvements. Loading fs/ntfs/namei.c +29 −2 Original line number Diff line number Diff line Loading @@ -380,7 +380,7 @@ struct inode_operations ntfs_dir_inode_ops = { * Return the dentry of the parent directory on success or the error code on * error (IS_ERR() is true). */ struct dentry *ntfs_get_parent(struct dentry *child_dent) static struct dentry *ntfs_get_parent(struct dentry *child_dent) { struct inode *vi = child_dent->d_inode; ntfs_inode *ni = NTFS_I(vi); Loading Loading @@ -465,7 +465,7 @@ struct dentry *ntfs_get_parent(struct dentry *child_dent) * * Return the dentry on success or the error code on error (IS_ERR() is true). */ struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh) static struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh) { struct inode *vi; struct dentry *dent; Loading Loading @@ -496,3 +496,30 @@ struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh) ntfs_debug("Done for inode 0x%lx, generation 0x%x.", ino, gen); return dent; } /** * Export operations allowing NFS exporting of mounted NTFS partitions. * * We use the default ->decode_fh() and ->encode_fh() for now. Note that they * use 32 bits to store the inode number which is an unsigned long so on 64-bit * architectures is usually 64 bits so it would all fail horribly on huge * volumes. I guess we need to define our own encode and decode fh functions * that store 64-bit inode numbers at some point but for now we will ignore the * problem... * * We also use the default ->get_name() helper (used by ->decode_fh() via * fs/exportfs/expfs.c::find_exported_dentry()) as that is completely fs * independent. * * The default ->get_parent() just returns -EACCES so we have to provide our * own and the default ->get_dentry() is incompatible with NTFS due to not * allowing the inode number 0 which is used in NTFS for the system file $MFT * and due to using iget() whereas NTFS needs ntfs_iget(). */ struct export_operations ntfs_export_ops = { .get_parent = ntfs_get_parent, /* Find the parent of a given directory. */ .get_dentry = ntfs_get_dentry, /* Find a dentry for the inode given a file handle sub-fragment. */ }; fs/ntfs/ntfs.h +2 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ extern struct inode_operations ntfs_dir_inode_ops; extern struct file_operations ntfs_empty_file_ops; extern struct inode_operations ntfs_empty_inode_ops; extern struct export_operations ntfs_export_ops; /** * NTFS_SB - return the ntfs volume given a vfs super block * @sb: VFS super block Loading fs/ntfs/super.c +0 −34 Original line number Diff line number Diff line Loading @@ -2250,40 +2250,6 @@ static struct super_operations ntfs_sops = { proc. */ }; /** * Declarations for NTFS specific export operations (fs/ntfs/namei.c). */ extern struct dentry *ntfs_get_parent(struct dentry *child_dent); extern struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh); /** * Export operations allowing NFS exporting of mounted NTFS partitions. * * We use the default ->decode_fh() and ->encode_fh() for now. Note that they * use 32 bits to store the inode number which is an unsigned long so on 64-bit * architectures is usually 64 bits so it would all fail horribly on huge * volumes. I guess we need to define our own encode and decode fh functions * that store 64-bit inode numbers at some point but for now we will ignore the * problem... * * We also use the default ->get_name() helper (used by ->decode_fh() via * fs/exportfs/expfs.c::find_exported_dentry()) as that is completely fs * independent. * * The default ->get_parent() just returns -EACCES so we have to provide our * own and the default ->get_dentry() is incompatible with NTFS due to not * allowing the inode number 0 which is used in NTFS for the system file $MFT * and due to using iget() whereas NTFS needs ntfs_iget(). */ static struct export_operations ntfs_export_ops = { .get_parent = ntfs_get_parent, /* Find the parent of a given directory. */ .get_dentry = ntfs_get_dentry, /* Find a dentry for the inode given a file handle sub-fragment. */ }; /** * ntfs_fill_super - mount an ntfs filesystem * @sb: super block of ntfs filesystem to mount Loading Loading
fs/ntfs/ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,9 @@ ToDo/Notes: mft record for resident attributes (fs/ntfs/inode.c). - Small readability cleanup to use "a" instead of "ctx->attr" everywhere (fs/ntfs/inode.c). - Make fs/ntfs/namei.c::ntfs_get_{parent,dentry} static and move the definition of ntfs_export_ops from fs/ntfs/super.c to namei.c. Also, declare ntfs_export_ops in fs/ntfs/ntfs.h. 2.1.22 - Many bug and race fixes and error handling improvements. Loading
fs/ntfs/namei.c +29 −2 Original line number Diff line number Diff line Loading @@ -380,7 +380,7 @@ struct inode_operations ntfs_dir_inode_ops = { * Return the dentry of the parent directory on success or the error code on * error (IS_ERR() is true). */ struct dentry *ntfs_get_parent(struct dentry *child_dent) static struct dentry *ntfs_get_parent(struct dentry *child_dent) { struct inode *vi = child_dent->d_inode; ntfs_inode *ni = NTFS_I(vi); Loading Loading @@ -465,7 +465,7 @@ struct dentry *ntfs_get_parent(struct dentry *child_dent) * * Return the dentry on success or the error code on error (IS_ERR() is true). */ struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh) static struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh) { struct inode *vi; struct dentry *dent; Loading Loading @@ -496,3 +496,30 @@ struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh) ntfs_debug("Done for inode 0x%lx, generation 0x%x.", ino, gen); return dent; } /** * Export operations allowing NFS exporting of mounted NTFS partitions. * * We use the default ->decode_fh() and ->encode_fh() for now. Note that they * use 32 bits to store the inode number which is an unsigned long so on 64-bit * architectures is usually 64 bits so it would all fail horribly on huge * volumes. I guess we need to define our own encode and decode fh functions * that store 64-bit inode numbers at some point but for now we will ignore the * problem... * * We also use the default ->get_name() helper (used by ->decode_fh() via * fs/exportfs/expfs.c::find_exported_dentry()) as that is completely fs * independent. * * The default ->get_parent() just returns -EACCES so we have to provide our * own and the default ->get_dentry() is incompatible with NTFS due to not * allowing the inode number 0 which is used in NTFS for the system file $MFT * and due to using iget() whereas NTFS needs ntfs_iget(). */ struct export_operations ntfs_export_ops = { .get_parent = ntfs_get_parent, /* Find the parent of a given directory. */ .get_dentry = ntfs_get_dentry, /* Find a dentry for the inode given a file handle sub-fragment. */ };
fs/ntfs/ntfs.h +2 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ extern struct inode_operations ntfs_dir_inode_ops; extern struct file_operations ntfs_empty_file_ops; extern struct inode_operations ntfs_empty_inode_ops; extern struct export_operations ntfs_export_ops; /** * NTFS_SB - return the ntfs volume given a vfs super block * @sb: VFS super block Loading
fs/ntfs/super.c +0 −34 Original line number Diff line number Diff line Loading @@ -2250,40 +2250,6 @@ static struct super_operations ntfs_sops = { proc. */ }; /** * Declarations for NTFS specific export operations (fs/ntfs/namei.c). */ extern struct dentry *ntfs_get_parent(struct dentry *child_dent); extern struct dentry *ntfs_get_dentry(struct super_block *sb, void *fh); /** * Export operations allowing NFS exporting of mounted NTFS partitions. * * We use the default ->decode_fh() and ->encode_fh() for now. Note that they * use 32 bits to store the inode number which is an unsigned long so on 64-bit * architectures is usually 64 bits so it would all fail horribly on huge * volumes. I guess we need to define our own encode and decode fh functions * that store 64-bit inode numbers at some point but for now we will ignore the * problem... * * We also use the default ->get_name() helper (used by ->decode_fh() via * fs/exportfs/expfs.c::find_exported_dentry()) as that is completely fs * independent. * * The default ->get_parent() just returns -EACCES so we have to provide our * own and the default ->get_dentry() is incompatible with NTFS due to not * allowing the inode number 0 which is used in NTFS for the system file $MFT * and due to using iget() whereas NTFS needs ntfs_iget(). */ static struct export_operations ntfs_export_ops = { .get_parent = ntfs_get_parent, /* Find the parent of a given directory. */ .get_dentry = ntfs_get_dentry, /* Find a dentry for the inode given a file handle sub-fragment. */ }; /** * ntfs_fill_super - mount an ntfs filesystem * @sb: super block of ntfs filesystem to mount Loading