|
@@ -41,14 +41,8 @@ void nfs_mark_delegation_referenced(struct nfs_delegation *delegation)
|
|
|
set_bit(NFS_DELEGATION_REFERENCED, &delegation->flags);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * nfs_have_delegation - check if inode has a delegation
|
|
|
- * @inode: inode to check
|
|
|
- * @flags: delegation types to check for
|
|
|
- *
|
|
|
- * Returns one if inode has the indicated delegation, otherwise zero.
|
|
|
- */
|
|
|
-int nfs4_have_delegation(struct inode *inode, fmode_t flags)
|
|
|
+static int
|
|
|
+nfs4_do_check_delegation(struct inode *inode, fmode_t flags, bool mark)
|
|
|
{
|
|
|
struct nfs_delegation *delegation;
|
|
|
int ret = 0;
|
|
@@ -58,12 +52,34 @@ int nfs4_have_delegation(struct inode *inode, fmode_t flags)
|
|
|
delegation = rcu_dereference(NFS_I(inode)->delegation);
|
|
|
if (delegation != NULL && (delegation->type & flags) == flags &&
|
|
|
!test_bit(NFS_DELEGATION_RETURNING, &delegation->flags)) {
|
|
|
- nfs_mark_delegation_referenced(delegation);
|
|
|
+ if (mark)
|
|
|
+ nfs_mark_delegation_referenced(delegation);
|
|
|
ret = 1;
|
|
|
}
|
|
|
rcu_read_unlock();
|
|
|
return ret;
|
|
|
}
|
|
|
+/**
|
|
|
+ * nfs_have_delegation - check if inode has a delegation, mark it
|
|
|
+ * NFS_DELEGATION_REFERENCED if there is one.
|
|
|
+ * @inode: inode to check
|
|
|
+ * @flags: delegation types to check for
|
|
|
+ *
|
|
|
+ * Returns one if inode has the indicated delegation, otherwise zero.
|
|
|
+ */
|
|
|
+int nfs4_have_delegation(struct inode *inode, fmode_t flags)
|
|
|
+{
|
|
|
+ return nfs4_do_check_delegation(inode, flags, true);
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * nfs4_check_delegation - check if inode has a delegation, do not mark
|
|
|
+ * NFS_DELEGATION_REFERENCED if it has one.
|
|
|
+ */
|
|
|
+int nfs4_check_delegation(struct inode *inode, fmode_t flags)
|
|
|
+{
|
|
|
+ return nfs4_do_check_delegation(inode, flags, false);
|
|
|
+}
|
|
|
|
|
|
static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_state *state, const nfs4_stateid *stateid)
|
|
|
{
|