Jails on NFS: locks on file

Valerio Daelli vdaelli at hotmail.com
Thu Jun 9 09:12:33 GMT 2005


Hi all,
we are using FreeBSD 5.4 with some jails.
One of this jail is on a NFS directory - I mean: the whole filesystem of 
this jail is on a remote directory, exported by a FreeBSD 5.4 server with 
NFS, and the 'host' system (the one that started and stopped the jail) 
mounts it via NFS. In this jail we can't perform a 'flock' operation, even 
if the NFS server has rpc.lockd and rpc.statd. We built a little executable 
in C like this (let's call it myflock):

___________________________________________________________
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>

int main() {
  int lockfd;
  char* tempfile="tempfile";

  lockfd=open(tempfile,O_CREAT);
  if (flock(lockfd, LOCK_SH|LOCK_NB)==-1) {
    printf("ERROR shared lock:  %d",errno);
  }
  if (flock(lockfd, LOCK_EX|LOCK_NB)==-1) {
    printf("ERROR exclusive lock:  %d",errno);
  }
   close(lockfd);
}
___________________________________________________________

We executed on a local directory and it gets the flock.
We executed on the mounted NFS partition (with rpc.lockd and rpc.statd) and 
it works.
We executed in the jail-NFS and it fails! Errno 45 (from 
'/usr/include/errno.h': #define EOPNOTSUPP      45              /* Operation 
not supported */). The directory where we launch myflock is the same as the 
previous command (no permission problems).
We executed in a jail contained in a md mounted on a NFS directory and it 
works.
Could it be a rpcbind issue (the jail can't get the flock since it can't 
rpc-contact the NFS server)?
Thanks a lot

Valerio Daelli




More information about the freebsd-questions mailing list