@@ -139,6 +139,7 @@ extern struct sockaddr pnfsd_lexp_addr;
extern size_t pnfs_lexp_addr_len;
extern void pnfsd_lexp_init(struct inode *);
+extern bool is_inode_pnfsd_lexp(struct inode *);
extern int pnfsd_lexp_recall_layout(struct inode *);
#endif /* CONFIG_PNFSD_LOCAL_EXPORT */
@@ -232,6 +232,12 @@ pnfsd_lexp_init(struct inode *inode)
init_waitqueue_head(&lo_recall_wq);
}
+bool
+is_inode_pnfsd_lexp(struct inode *inode)
+{
+ return inode->i_sb->s_pnfs_op == &pnfsd_lexp_ops;
+}
+
static bool
has_no_layout(struct nfs4_file *fp)
{
@@ -386,7 +386,8 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
if (err)
goto out;
#if defined(CONFIG_PNFSD_LOCAL_EXPORT)
- pnfsd_lexp_recall_layout(inode);
+ if (is_inode_pnfsd_lexp(inode))
+ pnfsd_lexp_recall_layout(inode);
#endif /* CONFIG_PNFSD_LOCAL_EXPORT */
#if defined(CONFIG_SPNFS_BLOCK)
if (pnfs_block_enabled(inode, 0)) {