Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 832896 Details for
Bug 1003546
NFS + large XFS fs sometimes fails uncached lookups for client when inode number >2^32 on 32-bit computers
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
upstream patch "exportfs: fix 32-bit nfsd handling of 64-bit inode numbers"
TMP (text/plain), 2.06 KB, created by
J. Bruce Fields
on 2013-12-04 22:51:55 UTC
(
hide
)
Description:
upstream patch "exportfs: fix 32-bit nfsd handling of 64-bit inode numbers"
Filename:
MIME Type:
Creator:
J. Bruce Fields
Created:
2013-12-04 22:51:55 UTC
Size:
2.06 KB
patch
obsolete
>commit 950ee9566a5b6cc45d15f5fe044bab4f1e8b62cb >Author: J. Bruce Fields <bfields@redhat.com> >Date: Tue Sep 10 11:41:12 2013 -0400 > > exportfs: fix 32-bit nfsd handling of 64-bit inode numbers > > Symptoms were spurious -ENOENTs on stat of an NFS filesystem from a > 32-bit NFS server exporting a very large XFS filesystem, when the > server's cache is cold (so the inodes in question are not in cache). > > Reviewed-by: Christoph Hellwig <hch@lst.de> > Reported-by: Trevor Cordes <trevor@tecnopolis.ca> > Signed-off-by: J. Bruce Fields <bfields@redhat.com> > Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> > >diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c >index a235f00..c43fe9b 100644 >--- a/fs/exportfs/expfs.c >+++ b/fs/exportfs/expfs.c >@@ -215,7 +215,7 @@ struct getdents_callback { > struct dir_context ctx; > char *name; /* name that was found. It already points to a > buffer NAME_MAX+1 is size */ >- unsigned long ino; /* the inum we are looking for */ >+ u64 ino; /* the inum we are looking for */ > int found; /* inode matched? */ > int sequence; /* sequence counter */ > }; >@@ -255,10 +255,14 @@ static int get_name(const struct path *path, char *name, struct dentry *child) > struct inode *dir = path->dentry->d_inode; > int error; > struct file *file; >+ struct kstat stat; >+ struct path child_path = { >+ .mnt = path->mnt, >+ .dentry = child, >+ }; > struct getdents_callback buffer = { > .ctx.actor = filldir_one, > .name = name, >- .ino = child->d_inode->i_ino > }; > > error = -ENOTDIR; >@@ -268,6 +272,16 @@ static int get_name(const struct path *path, char *name, struct dentry *child) > if (!dir->i_fop) > goto out; > /* >+ * inode->i_ino is unsigned long, kstat->ino is u64, so the >+ * former would be insufficient on 32-bit hosts when the >+ * filesystem supports 64-bit inode numbers. So we need to >+ * actually call ->getattr, not just read i_ino: >+ */ >+ error = vfs_getattr_nosec(&child_path, &stat); >+ if (error) >+ return error; >+ buffer.ino = stat.ino; >+ /* > * Open the directory ... > */ > file = dentry_open(path, O_RDONLY, cred);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1003546
:
793579
|
793580
|
793581
|
793582
|
794600
|
794955
|
796070
|
798881
|
803897
|
826289
| 832896 |
832897