Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/fs/nfsd/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  lockd.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * This file contains all the stubs needed when communicating with lockd.
 * This level of indirection is necessary so we can run nfsd+lockd without
 * requiring the nfs client to be compiled in/loaded, and vice versa.
 *
 * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
 */


#include <linux/file.h>
#include <linux/lockd/bind.h>
#include "nfsd.h"
#include "vfs.h"

#define NFSDDBG_FACILITY  NFSDDBG_LOCKD

#ifdef CONFIG_LOCKD_V4
#define nlm_stale_fh nlm4_stale_fh
#define nlm_failed nlm4_failed
#else
#define nlm_stale_fh nlm_lck_denied_nolocks
#define nlm_failed nlm_lck_denied_nolocks
#endif
/*
 * Note: we hold the dentry use count while the file is open.
 */

static __be32
nlm_fopen(struct svc_rqst *rqstp, struct nfs_fh *f, struct file **filp,
  int mode)
{
 __be32  nfserr;
 int  access;
 struct svc_fh fh;

 /* must initialize before using! but maxsize doesn't matter */
 fh_init(&fh,0);
 fh.fh_handle.fh_size = f->size;
 memcpy(&fh.fh_handle.fh_raw, f->data, f->size);
 fh.fh_export = NULL;

 /*
 * Allow BYPASS_GSS as some client implementations use AUTH_SYS
 * for NLM even when GSS is used for NFS.
 * Allow OWNER_OVERRIDE as permission might have been changed
 * after the file was opened.
 * Pass MAY_NLM so that authentication can be completely bypassed
 * if NFSEXP_NOAUTHNLM is set.  Some older clients use AUTH_NULL
 * for NLM requests.
 */

 access = (mode == O_WRONLY) ? NFSD_MAY_WRITE : NFSD_MAY_READ;
 access |= NFSD_MAY_NLM | NFSD_MAY_OWNER_OVERRIDE | NFSD_MAY_BYPASS_GSS;
 nfserr = nfsd_open(rqstp, &fh, S_IFREG, access, filp);
 fh_put(&fh);
 /* We return nlm error codes as nlm doesn't know
 * about nfsd, but nfsd does know about nlm..
 */

 switch (nfserr) {
 case nfs_ok:
  return 0;
 case nfserr_jukebox:
  /* this error can indicate a presence of a conflicting
 * delegation to an NLM lock request. Options are:
 * (1) For now, drop this request and make the client
 * retry. When delegation is returned, client's lock retry
 * will complete.
 * (2) NLM4_DENIED as per "spec" signals to the client
 * that the lock is unavailable now but client can retry.
 * Linux client implementation does not. It treats
 * NLM4_DENIED same as NLM4_FAILED and errors the request.
 * (3) For the future, treat this as blocked lock and try
 * to callback when the delegation is returned but might
 * not have a proper lock request to block on.
 */

  fallthrough;
 case nfserr_dropit:
  return nlm_drop_reply;
 case nfserr_stale:
  return nlm_stale_fh;
 default:
  return nlm_failed;
 }
}

static void
nlm_fclose(struct file *filp)
{
 fput(filp);
}

static const struct nlmsvc_binding nfsd_nlm_ops = {
 .fopen  = nlm_fopen,  /* open file for locking */
 .fclose  = nlm_fclose,  /* close file */
};

void
nfsd_lockd_init(void)
{
 dprintk("nfsd: initializing lockd\n");
 nlmsvc_ops = &nfsd_nlm_ops;
}

void
nfsd_lockd_shutdown(void)
{
 nlmsvc_ops = NULL;
}

Messung V0.5
C=96 H=93 G=94

¤ Dauer der Verarbeitung: 0.19 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.