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    [from the cache]
©2003-2014 Jasper Spaans. Advertise on this site