lkml.org 
[lkml]   [2007]   [Jun]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] allow file system to configure for no leases
    Trond Myklebust wrote:
    > On Tue, 2007-06-05 at 15:10 -0400, Peter Staubach wrote:
    >
    >> Hi.
    >>
    >> Attached is a small patch to allow file systems to inform the file
    >> system independent layers that they don't support file leases.
    >>
    >> The problem is that some file system such as NFSv2 and NFSv3 do
    >> not have sufficient support to be able to support leases correctly.
    >> In particular for these two file systems, there is no over the wire
    >> protocol support.
    >>
    >> Currently, these two file systems fail the fcntl(F_SETLEASE) call
    >> accidently, due to a reference counting difference. These file systems
    >> should fail more consciously, with a proper error to indicate that
    >> the call is invalid for them.
    >>
    >> Thanx...
    >>
    >> ps
    >> plain text document attachment (devel.tototoday)
    >> --- linux-2.6.21.i686/fs/nfs/super.c.org
    >> +++ linux-2.6.21.i686/fs/nfs/super.c
    >> @@ -522,6 +522,9 @@ static inline void nfs_initialise_sb(str
    >>
    >> sb->s_magic = NFS_SUPER_MAGIC;
    >>
    >> + if (server->nfs_client->cl_nfsversion < 4)
    >> + sb->s_flags |= MS_NO_LEASES;
    >> +
    >>
    >
    > This should be unconditional since we have no support for "lease locks"
    > under NFSv4 either. The NFSv4 concept of leases and delegations is very
    > different, since it is really tied to the ability to cache data.

    No problem. I wasn't sure, what with the changes that Bruce Fields
    is constructing.

    Attached is the simplified version.

    Thanx...

    ps
    --- linux-2.6.21.i686/fs/nfs/super.c.org
    +++ linux-2.6.21.i686/fs/nfs/super.c
    @@ -522,6 +522,8 @@ static inline void nfs_initialise_sb(str

    sb->s_magic = NFS_SUPER_MAGIC;

    + sb->s_flags |= MS_NO_LEASES;
    +
    /* We probably want something more informative here */
    snprintf(sb->s_id, sizeof(sb->s_id),
    "%x:%x", MAJOR(sb->s_dev), MINOR(sb->s_dev));
    --- linux-2.6.21.i686/fs/locks.c.org
    +++ linux-2.6.21.i686/fs/locks.c
    @@ -1493,6 +1493,8 @@ int fcntl_setlease(unsigned int fd, stru
    error = security_file_lock(filp, arg);
    if (error)
    return error;
    + if (IS_NO_LEASES(inode))
    + return -EINVAL;

    locks_init_lock(&fl);
    error = lease_init(filp, arg, &fl);
    --- linux-2.6.21.i686/include/linux/fs.h.org
    +++ linux-2.6.21.i686/include/linux/fs.h
    @@ -121,6 +121,7 @@ extern int dir_notify_enable;
    #define MS_SLAVE (1<<19) /* change to slave */
    #define MS_SHARED (1<<20) /* change to shared */
    #define MS_RELATIME (1<<21) /* Update atime relative to mtime/ctime. */
    +#define MS_NO_LEASES (1<<22) /* fs does not support leases */
    #define MS_ACTIVE (1<<30)
    #define MS_NOUSER (1<<31)

    @@ -180,6 +181,7 @@ extern int dir_notify_enable;
    #define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME)
    #define IS_SWAPFILE(inode) ((inode)->i_flags & S_SWAPFILE)
    #define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE)
    +#define IS_NO_LEASES(inode) __IS_FLG(inode, MS_NO_LEASES)

    /* the read-only stuff doesn't really belong here, but any other place is
    probably as bad and I don't want to create yet another include file. */
    \
     
     \ /
      Last update: 2007-06-05 21:55    [W:0.032 / U:90.016 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site