mirror of
https://github.com/torvalds/linux.git
synced 2026-06-09 23:23:53 +02:00
xfs: fix nfs export of 64-bit inodes numbers on 32-bit kernels
commit c29f7d457a upstream.
The i_ino field in the VFS inode is of type unsigned long and thus can't
hold the full 64-bit inode number on 32-bit kernels. We have the full
inode number in the XFS inode, so use that one for nfs exports. Note
that I've also switched the 32-bit file handles types to it, just to make
the code more consistent and copy & paste errors less likely to happen.
Reported-by: Guoquan Yang <ygq51@hotmail.com>
Reported-by: Hank Peng <pengxihan@gmail.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
ccd5790e5f
commit
898726cbef
|
|
@ -98,22 +98,22 @@ xfs_fs_encode_fh(
|
|||
switch (fileid_type) {
|
||||
case FILEID_INO32_GEN_PARENT:
|
||||
spin_lock(&dentry->d_lock);
|
||||
fid->i32.parent_ino = dentry->d_parent->d_inode->i_ino;
|
||||
fid->i32.parent_ino = XFS_I(dentry->d_parent->d_inode)->i_ino;
|
||||
fid->i32.parent_gen = dentry->d_parent->d_inode->i_generation;
|
||||
spin_unlock(&dentry->d_lock);
|
||||
/*FALLTHRU*/
|
||||
case FILEID_INO32_GEN:
|
||||
fid->i32.ino = inode->i_ino;
|
||||
fid->i32.ino = XFS_I(inode)->i_ino;
|
||||
fid->i32.gen = inode->i_generation;
|
||||
break;
|
||||
case FILEID_INO32_GEN_PARENT | XFS_FILEID_TYPE_64FLAG:
|
||||
spin_lock(&dentry->d_lock);
|
||||
fid64->parent_ino = dentry->d_parent->d_inode->i_ino;
|
||||
fid64->parent_ino = XFS_I(dentry->d_parent->d_inode)->i_ino;
|
||||
fid64->parent_gen = dentry->d_parent->d_inode->i_generation;
|
||||
spin_unlock(&dentry->d_lock);
|
||||
/*FALLTHRU*/
|
||||
case FILEID_INO32_GEN | XFS_FILEID_TYPE_64FLAG:
|
||||
fid64->ino = inode->i_ino;
|
||||
fid64->ino = XFS_I(inode)->i_ino;
|
||||
fid64->gen = inode->i_generation;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user