diff options
author | Cyrill Gorcunov <gorcunov@openvz.org> | 2012-12-17 19:05:08 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-17 20:15:27 -0500 |
commit | 711c7bf9914060d7aaf3c1a15f38094a5d5e748f (patch) | |
tree | 9e77f75166d591c2a3979494253793add2df607a /fs | |
parent | ab49bdecc3ebb46ab661f5f05d5c5ea9606406c6 (diff) |
fs, exportfs: add exportfs_encode_inode_fh() helper
We will need this helper in the next patch to provide a file handle for
inotify marks in /proc/pid/fdinfo output.
The patch is rather providing the way to use inodes directly when dentry
is not available (like in case of inotify system).
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Pavel Emelyanov <xemul@parallels.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Andrey Vagin <avagin@openvz.org>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: James Bottomley <jbottomley@parallels.com>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Matthew Helsley <matt.helsley@gmail.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/exportfs/expfs.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c index 10f137381ac7..606bb074c501 100644 --- a/fs/exportfs/expfs.c +++ b/fs/exportfs/expfs.c | |||
@@ -341,10 +341,21 @@ static int export_encode_fh(struct inode *inode, struct fid *fid, | |||
341 | return type; | 341 | return type; |
342 | } | 342 | } |
343 | 343 | ||
344 | int exportfs_encode_inode_fh(struct inode *inode, struct fid *fid, | ||
345 | int *max_len, struct inode *parent) | ||
346 | { | ||
347 | const struct export_operations *nop = inode->i_sb->s_export_op; | ||
348 | |||
349 | if (nop && nop->encode_fh) | ||
350 | return nop->encode_fh(inode, fid->raw, max_len, parent); | ||
351 | |||
352 | return export_encode_fh(inode, fid, max_len, parent); | ||
353 | } | ||
354 | EXPORT_SYMBOL_GPL(exportfs_encode_inode_fh); | ||
355 | |||
344 | int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, int *max_len, | 356 | int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, int *max_len, |
345 | int connectable) | 357 | int connectable) |
346 | { | 358 | { |
347 | const struct export_operations *nop = dentry->d_sb->s_export_op; | ||
348 | int error; | 359 | int error; |
349 | struct dentry *p = NULL; | 360 | struct dentry *p = NULL; |
350 | struct inode *inode = dentry->d_inode, *parent = NULL; | 361 | struct inode *inode = dentry->d_inode, *parent = NULL; |
@@ -357,10 +368,8 @@ int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, int *max_len, | |||
357 | */ | 368 | */ |
358 | parent = p->d_inode; | 369 | parent = p->d_inode; |
359 | } | 370 | } |
360 | if (nop && nop->encode_fh) | 371 | |
361 | error = nop->encode_fh(inode, fid->raw, max_len, parent); | 372 | error = exportfs_encode_inode_fh(inode, fid, max_len, parent); |
362 | else | ||
363 | error = export_encode_fh(inode, fid, max_len, parent); | ||
364 | dput(p); | 373 | dput(p); |
365 | 374 | ||
366 | return error; | 375 | return error; |