diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/nfsfh.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c index 0eb464a39aae..7011d62acfc8 100644 --- a/fs/nfsd/nfsfh.c +++ b/fs/nfsd/nfsfh.c | |||
@@ -566,13 +566,23 @@ enum fsid_source fsid_source(struct svc_fh *fhp) | |||
566 | case FSID_DEV: | 566 | case FSID_DEV: |
567 | case FSID_ENCODE_DEV: | 567 | case FSID_ENCODE_DEV: |
568 | case FSID_MAJOR_MINOR: | 568 | case FSID_MAJOR_MINOR: |
569 | return FSIDSOURCE_DEV; | 569 | if (fhp->fh_export->ex_dentry->d_inode->i_sb->s_type->fs_flags |
570 | & FS_REQUIRES_DEV) | ||
571 | return FSIDSOURCE_DEV; | ||
572 | break; | ||
570 | case FSID_NUM: | 573 | case FSID_NUM: |
571 | return FSIDSOURCE_FSID; | ||
572 | default: | ||
573 | if (fhp->fh_export->ex_flags & NFSEXP_FSID) | 574 | if (fhp->fh_export->ex_flags & NFSEXP_FSID) |
574 | return FSIDSOURCE_FSID; | 575 | return FSIDSOURCE_FSID; |
575 | else | 576 | break; |
576 | return FSIDSOURCE_UUID; | 577 | default: |
578 | break; | ||
577 | } | 579 | } |
580 | /* either a UUID type filehandle, or the filehandle doesn't | ||
581 | * match the export. | ||
582 | */ | ||
583 | if (fhp->fh_export->ex_flags & NFSEXP_FSID) | ||
584 | return FSIDSOURCE_FSID; | ||
585 | if (fhp->fh_export->ex_uuid) | ||
586 | return FSIDSOURCE_UUID; | ||
587 | return FSIDSOURCE_DEV; | ||
578 | } | 588 | } |