Commit 2728c57f authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'nfsd-4.7-3' of git://linux-nfs.org/~bfields/linux

Pull lockd/locks fixes from Bruce Fields:
 "One fix for lockd soft lookups in an error path, and one fix for file
  leases on overlayfs"

* tag 'nfsd-4.7-3' of git://linux-nfs.org/~bfields/linux:
  locks: use file_inode()
  lockd: unregister notifier blocks if the service fails to come up completely
parents 0d064a7b 6343a212
...@@ -335,12 +335,17 @@ static struct notifier_block lockd_inet6addr_notifier = { ...@@ -335,12 +335,17 @@ static struct notifier_block lockd_inet6addr_notifier = {
}; };
#endif #endif
static void lockd_svc_exit_thread(void) static void lockd_unregister_notifiers(void)
{ {
unregister_inetaddr_notifier(&lockd_inetaddr_notifier); unregister_inetaddr_notifier(&lockd_inetaddr_notifier);
#if IS_ENABLED(CONFIG_IPV6) #if IS_ENABLED(CONFIG_IPV6)
unregister_inet6addr_notifier(&lockd_inet6addr_notifier); unregister_inet6addr_notifier(&lockd_inet6addr_notifier);
#endif #endif
}
static void lockd_svc_exit_thread(void)
{
lockd_unregister_notifiers();
svc_exit_thread(nlmsvc_rqst); svc_exit_thread(nlmsvc_rqst);
} }
...@@ -462,7 +467,7 @@ int lockd_up(struct net *net) ...@@ -462,7 +467,7 @@ int lockd_up(struct net *net)
* Note: svc_serv structures have an initial use count of 1, * Note: svc_serv structures have an initial use count of 1,
* so we exit through here on both success and failure. * so we exit through here on both success and failure.
*/ */
err_net: err_put:
svc_destroy(serv); svc_destroy(serv);
err_create: err_create:
mutex_unlock(&nlmsvc_mutex); mutex_unlock(&nlmsvc_mutex);
...@@ -470,7 +475,9 @@ int lockd_up(struct net *net) ...@@ -470,7 +475,9 @@ int lockd_up(struct net *net)
err_start: err_start:
lockd_down_net(serv, net); lockd_down_net(serv, net);
goto err_net; err_net:
lockd_unregister_notifiers();
goto err_put;
} }
EXPORT_SYMBOL_GPL(lockd_up); EXPORT_SYMBOL_GPL(lockd_up);
......
...@@ -1628,7 +1628,7 @@ generic_add_lease(struct file *filp, long arg, struct file_lock **flp, void **pr ...@@ -1628,7 +1628,7 @@ generic_add_lease(struct file *filp, long arg, struct file_lock **flp, void **pr
{ {
struct file_lock *fl, *my_fl = NULL, *lease; struct file_lock *fl, *my_fl = NULL, *lease;
struct dentry *dentry = filp->f_path.dentry; struct dentry *dentry = filp->f_path.dentry;
struct inode *inode = dentry->d_inode; struct inode *inode = file_inode(filp);
struct file_lock_context *ctx; struct file_lock_context *ctx;
bool is_deleg = (*flp)->fl_flags & FL_DELEG; bool is_deleg = (*flp)->fl_flags & FL_DELEG;
int error; int error;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment