mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "E. Abbink" <esger@bumblebeast.com>
To: linux-kernel@vger.kernel.org
Subject: Problem using mandatory locks (other apps can read/delete etc)
Date: Wed, 10 Apr 2002 19:08:27 +0200	[thread overview]
Message-ID: <200204101708.TAA01151@fikkie.vesc.nl> (raw)

Hi,

I'm trying to solve a problem using mandatory locks but am having some
difficulty in doing so. (if there's a more appropriate place for
discussing this please ignore the rest of this post. pointers to that
place would be appreciated ;) )

my problem:

when I lock a file with a mandatory write lock (ie. fcntl, +s-x bits and
mand mount option. for code see below) it is still possible:

- for me to rm the file in question
- for the file to be read by an other process

It's not possible to cat to the file or cp another file over it (as
expected). For my application I want a locked file to be completely
locked/protected from other processes.

If I retry the same without setting the +s-x bits the cp & cat succeed,
so something special is being done in the first case.


According to all docs (i can find) mandatory locks should block both the 
read and write system calls (i cant find anything in it regarding unlink 
though...). In my case however it seems as if only write calls are
blocked but not read calls?

If anyone could shed any light on this it would be much appreciated.

Esger



system details:

linux 2.4.17 partially suse & xfs patched kernel
filesystem is reiserfs
i386 dual pIII450

test app code:

int main ()
{
    int fd ;


    fd = open ("image.jpg", O_RDWR) ;

    if (fd == -1)
    {
        printf ("error %d while opening file\n", errno) ;
        exit (1) ;
    }

    struct flock lock ;

    lock.l_type = F_WRLCK ;
    lock.l_whence = SEEK_SET ;
    lock.l_start = 0 ;
    lock.l_len = 0 ;
    lock.l_pid = 0 ; // ignored

    int err = fcntl (fd, F_SETLK, &lock) ;

    if (err == -1)
    {
        printf ("error %d while locking file\n", errno) ;
        exit (1) ;
    }
    else
        printf ("file locked\n") ;


    while (1)
        sleep (1) ;
}






-- 
NeoMail - Webmail that doesn't suck... as much.
http://neomail.sourceforge.net

             reply	other threads:[~2002-04-10 16:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-10 17:08 E. Abbink [this message]
2002-04-11 11:37 ` Denis Vlasenko
2002-04-11 15:42   ` Alex Riesen
2002-04-11  9:35 E. Abbink
2002-04-12  9:22 E. Abbink

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200204101708.TAA01151@fikkie.vesc.nl \
    --to=esger@bumblebeast.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®