mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branch 'flock' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl
* 'flock' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl: locks: turn lock_flocks into a spinlock fasync: re-organize fasync entry insertion to allow it under a spinlock locks/nfsd: allocate file lock outside of spinlock lockd: fix nlmsvc_notify_blocked locking lockd: push lock_flocks down
This commit is contained in:
commit
7420a8c0de
10 changed files with 114 additions and 70 deletions
|
|
@ -2,7 +2,6 @@ config NFSD
|
|||
tristate "NFS server support"
|
||||
depends on INET
|
||||
depends on FILE_LOCKING
|
||||
depends on BKL # fix as soon as lockd is done
|
||||
select LOCKD
|
||||
select SUNRPC
|
||||
select EXPORTFS
|
||||
|
|
|
|||
|
|
@ -2614,7 +2614,7 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
|
|||
struct nfs4_delegation *dp;
|
||||
struct nfs4_stateowner *sop = stp->st_stateowner;
|
||||
int cb_up = atomic_read(&sop->so_client->cl_cb_set);
|
||||
struct file_lock fl, *flp = &fl;
|
||||
struct file_lock *fl;
|
||||
int status, flag = 0;
|
||||
|
||||
flag = NFS4_OPEN_DELEGATE_NONE;
|
||||
|
|
@ -2648,20 +2648,24 @@ nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, struct nfs4_sta
|
|||
flag = NFS4_OPEN_DELEGATE_NONE;
|
||||
goto out;
|
||||
}
|
||||
locks_init_lock(&fl);
|
||||
fl.fl_lmops = &nfsd_lease_mng_ops;
|
||||
fl.fl_flags = FL_LEASE;
|
||||
fl.fl_type = flag == NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK;
|
||||
fl.fl_end = OFFSET_MAX;
|
||||
fl.fl_owner = (fl_owner_t)dp;
|
||||
fl.fl_file = find_readable_file(stp->st_file);
|
||||
BUG_ON(!fl.fl_file);
|
||||
fl.fl_pid = current->tgid;
|
||||
status = -ENOMEM;
|
||||
fl = locks_alloc_lock();
|
||||
if (!fl)
|
||||
goto out;
|
||||
locks_init_lock(fl);
|
||||
fl->fl_lmops = &nfsd_lease_mng_ops;
|
||||
fl->fl_flags = FL_LEASE;
|
||||
fl->fl_type = flag == NFS4_OPEN_DELEGATE_READ? F_RDLCK: F_WRLCK;
|
||||
fl->fl_end = OFFSET_MAX;
|
||||
fl->fl_owner = (fl_owner_t)dp;
|
||||
fl->fl_file = find_readable_file(stp->st_file);
|
||||
BUG_ON(!fl->fl_file);
|
||||
fl->fl_pid = current->tgid;
|
||||
|
||||
/* vfs_setlease checks to see if delegation should be handed out.
|
||||
* the lock_manager callbacks fl_mylease and fl_change are used
|
||||
*/
|
||||
if ((status = vfs_setlease(fl.fl_file, fl.fl_type, &flp))) {
|
||||
if ((status = vfs_setlease(fl->fl_file, fl->fl_type, &fl))) {
|
||||
dprintk("NFSD: setlease failed [%d], no delegation\n", status);
|
||||
unhash_delegation(dp);
|
||||
flag = NFS4_OPEN_DELEGATE_NONE;
|
||||
|
|
|
|||
Loading…
Reference in a new issue