From mboxrd@z Thu Jan 1 00:00:00 1970 From: "William A.(Andy) Adamson" Subject: PATCH [8/10] lease interfaces for version 4 NFSD Date: Mon, 20 Sep 2004 16:23:07 -0400 Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: <20040920202307.339961BBA3@citi.umich.edu> Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="==_Exmh_-2209652480" Cc: andros@citi.umich.edu Return-path: Received: from citi.umich.edu ([141.211.133.111]:59456 "EHLO citi.umich.edu") by vger.kernel.org with ESMTP id S267323AbUITUXJ (ORCPT ); Mon, 20 Sep 2004 16:23:09 -0400 To: linux-fsdevel@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org This is a multipart MIME message. --==_Exmh_-2209652480 Content-Type: text/plain; charset=us-ascii VFS: export setlease, a direct interface to __setlease, used by nfsd Signed-off-by: Andy Adamson --==_Exmh_-2209652480 Content-Type: text/plain ; name="linux-2.6.9-rc2-08-setlease.dif"; charset=us-ascii Content-Description: linux-2.6.9-rc2-08-setlease.dif Content-Disposition: attachment; filename="linux-2.6.9-rc2-08-setlease.dif" diff --recursive -puN old/fs/locks.c new/fs/locks.c --- old/fs/locks.c 2004-09-20 14:15:31.144266000 -0400 +++ new/fs/locks.c 2004-09-20 14:18:58.644037000 -0400 @@ -1338,6 +1338,39 @@ out: } /** + * setlease - sets a lease on an open file + * @filp: file pointer + * @arg: type of lease to obtain + * @lease: file_lock to use + * + * Call this to establish a lease on the file. + * The fl_lmops fl_break function is required by break_lease + */ + +int setlease(struct file *filp, long arg, struct file_lock **lease) +{ + struct dentry *dentry = filp->f_dentry; + struct inode *inode = dentry->d_inode; + int error; + + if ((current->fsuid != inode->i_uid) && !capable(CAP_LEASE)) + return -EACCES; + if (!S_ISREG(inode->i_mode)) + return -EINVAL; + error = security_file_lock(filp, arg); + if (error) + return error; + + lock_kernel(); + error = __setlease(filp, arg, lease); + unlock_kernel(); + + return error; +} + +EXPORT_SYMBOL(setlease); + +/** * fcntl_setlease - sets a lease on an open file * @fd: open file descriptor * @filp: file pointer diff --recursive -puN old/include/linux/fs.h new/include/linux/fs.h --- old/include/linux/fs.h 2004-09-20 13:06:31.333998000 -0400 +++ new/include/linux/fs.h 2004-09-20 14:27:37.183726000 -0400 @@ -701,6 +701,7 @@ extern int posix_locks_deadlock(struct f extern int flock_lock_file_wait(struct file *filp, struct file_lock *fl); extern int __break_lease(struct inode *inode, unsigned int flags); extern void lease_get_mtime(struct inode *, struct timespec *time); +extern int setlease(struct file *, long, struct file_lock **); extern int lock_may_read(struct inode *, loff_t start, unsigned long count); extern int lock_may_write(struct inode *, loff_t start, unsigned long count); extern void steal_locks(fl_owner_t from); --==_Exmh_-2209652480--