Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -335,12 +335,17 @@ static struct notifier_block lockd_inet6addr_notifier = {
};
#endif

static void lockd_svc_exit_thread(void)
static void lockd_unregister_notifiers(void)
{
	unregister_inetaddr_notifier(&lockd_inetaddr_notifier);
#if IS_ENABLED(CONFIG_IPV6)
	unregister_inet6addr_notifier(&lockd_inet6addr_notifier);
#endif
}

static void lockd_svc_exit_thread(void)
{
	lockd_unregister_notifiers();
	svc_exit_thread(nlmsvc_rqst);
}

@@ -462,7 +467,7 @@ int lockd_up(struct net *net)
	 * Note: svc_serv structures have an initial use count of 1,
	 * so we exit through here on both success and failure.
	 */
err_net:
err_put:
	svc_destroy(serv);
err_create:
	mutex_unlock(&nlmsvc_mutex);
@@ -470,7 +475,9 @@ int lockd_up(struct net *net)

err_start:
	lockd_down_net(serv, net);
	goto err_net;
err_net:
	lockd_unregister_notifiers();
	goto err_put;
}
EXPORT_SYMBOL_GPL(lockd_up);

+1 −1
Original line number Diff line number Diff line
@@ -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 dentry *dentry = filp->f_path.dentry;
	struct inode *inode = dentry->d_inode;
	struct inode *inode = file_inode(filp);
	struct file_lock_context *ctx;
	bool is_deleg = (*flp)->fl_flags & FL_DELEG;
	int error;