Return-Path: Received: from mail-out2.uio.no ([129.240.10.58]:55839 "EHLO mail-out2.uio.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754315Ab0E0Mew (ORCPT ); Thu, 27 May 2010 08:34:52 -0400 Subject: Re: Debugging fcntl() file locks From: Trond Myklebust To: Bernd Petrovitsch Cc: linux-nfs@vger.kernel.org In-Reply-To: <1274955060.14002.40.camel@thorin> References: <1274955060.14002.40.camel@thorin> Content-Type: text/plain; charset="UTF-8" Date: Thu, 27 May 2010 08:34:46 -0400 Message-ID: <1274963686.2895.7.camel@heimdal.trondhjem.org> Sender: linux-nfs-owner@vger.kernel.org List-ID: MIME-Version: 1.0 On Thu, 2010-05-27 at 12:11 +0200, Bernd Petrovitsch wrote: > Hi all! > > How can I debug fcntl() file locks on a NFSv3-client? > The server side is a NetApp-Box (no details at hand but I can ask). > The client side are stock-RHEL5.3/CentOS-5.3 kernels - 2.6.18-92.el5. > > The file system in question is mounted on 2 clients. flock() on a file > succeeds but fcntl() fails with EAGAIN. From what I found in the > Internet and manual pages, this means that someone else already locked > that file (- the file is successfully open()ed read/write so it can't be > "your are not allowed to write-lock the file"). > But how do I find out on which host and which process? > > strace shows: > ---- snip ---- > open("/... secret ...", O_RDWR) = 3 > ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff7925b400) = -1 ENOTTY (Inappropriate ioctl for device) > lseek(3, 0, SEEK_CUR) = 0 > fstat(3, {st_mode=S_IFREG|0600, st_size=935, ...}) = 0 > fcntl(3, F_SETFD, FD_CLOEXEC) = 0 > flock(3, LOCK_EX|LOCK_NB) = 0 > fcntl(3, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = -1 EAGAIN (Resource temporarily unavailable) > ---- snip ---- > [ This is a perl script using CPAN modules at the top. ] > > /proc/mounts shows > ---- snip ---- > rw,nodiratime,vers=3,rsize=32768,wsize=32768,hard,proto=tcp,timeo=600,retrans=2,sec=sys,addr= > ---- snip ---- > as options for the filesystem. > > Thanks in advance, > Bernd The Linux NFS client does not allow you to lock a file using both flock() and POSIX locks. You should choose one or the other locking scheme. If you remove the flock() line above, then the POSIX lock will likely succeed. Cheers Trond