All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	Christoph Hellwig <hch@infradead.org>,
	kernel@pengutronix.de, Jan Kara <jack@suse.com>,
	Richard Weinberger <richard@nod.at>
Subject: Re: [PATCH 1/2] quota: Add mountpath based quota support
Date: Thu, 28 Jan 2021 14:35:52 +0000	[thread overview]
Message-ID: <20210128143552.GA2042235@infradead.org> (raw)
In-Reply-To: <20210128141713.25223-2-s.hauer@pengutronix.de>

> +	uint cmds, type;
> +	struct super_block *sb = NULL;

I don't think sb needs the NULL initialization.

> +	struct path path, *pathp = NULL;
> +	struct path mountpath;
> +	bool excl = false, thawed = false;
> +	int ret;
> +
> +	cmds = cmd >> SUBCMDSHIFT;
> +	type = cmd & SUBCMDMASK;

Personal pet peeve: it would be nice to just initialize cmds and
type on their declaration line, or while we're at it declutter
this a bit and remove the separate cmds variable:

	unsigned int type = cmd & SUBCMDMASK;


	cmd >>= SUBCMDSHIFT;

> +	/*
> +	 * Path for quotaon has to be resolved before grabbing superblock
> +	 * because that gets s_umount sem which is also possibly needed by path
> +	 * resolution (think about autofs) and thus deadlocks could arise.
> +	 */
> +	if (cmds == Q_QUOTAON) {
> +		ret = user_path_at(AT_FDCWD, addr,
> +				   LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT, &path);
> +		if (ret)
> +			pathp = ERR_PTR(ret);
> +		else
> +			pathp = &path;
> +	}
> +
> +	ret = user_path_at(AT_FDCWD, mountpoint,
> +			     LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT, &mountpath);
> +	if (ret)
> +		goto out;

I don't think we need two path lookups here, we can path the same path
to the command for quotaon.


> +	if (quotactl_cmd_onoff(cmds)) {
> +		excl = true;
> +		thawed = true;
> +	} else if (quotactl_cmd_write(cmds)) {
> +		thawed = true;
> +	}
> +
> +	if (thawed) {
> +		ret = mnt_want_write(mountpath.mnt);
> +		if (ret)
> +			goto out1;
> +	}
> +
> +	sb = mountpath.dentry->d_inode->i_sb;
> +
> +	if (excl)
> +		down_write(&sb->s_umount);
> +	else
> +		down_read(&sb->s_umount);

Given how cheap quotactl_cmd_onoff and quotactl_cmd_write are we
could probably simplify this down do:

	if (quotactl_cmd_write(cmd)) {
		ret = mnt_want_write(path.mnt);
		if (ret)
			goto out1;
	}
	if (quotactl_cmd_onoff(cmd))
		down_write(&sb->s_umount);
	else
		down_read(&sb->s_umount);

and duplicate the checks after the do_quotactl call.

  reply	other threads:[~2021-01-28 14:37 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-28 14:17 [PATCH 0/2] quota: Add mountpath based quota support Sascha Hauer
2021-01-28 14:17 ` [PATCH 1/2] " Sascha Hauer
2021-01-28 14:35   ` Christoph Hellwig [this message]
2021-02-02 18:02     ` Jan Kara
2021-02-04  7:34       ` Christoph Hellwig
2021-02-04 12:53         ` Jan Kara
2021-02-09  8:51           ` Christoph Hellwig
2021-02-09  9:57             ` Jan Kara
2021-01-28 14:17 ` [PATCH 2/2] quota: wire up quotactl_path Sascha Hauer
2021-01-28 14:17 ` [PATCH] quotactl.2: Add documentation for quotactl_path() Sascha Hauer
2021-02-11 15:30 [PATCH v2 0/2] quota: Add mountpath based quota support Sascha Hauer
2021-02-11 15:30 ` [PATCH 1/2] " Sascha Hauer
2021-02-11 15:38   ` Christoph Hellwig
2021-02-12  8:38     ` Sascha Hauer
2021-02-12 10:05       ` Jan Kara
2021-02-12 10:29         ` Sascha Hauer
2021-02-12 10:41           ` Jan Kara
2021-02-12  5:45   ` kernel test robot
2021-02-12  5:45     ` kernel test robot
2021-02-14 13:48   ` Al Viro
2021-03-04 12:35 [PATCH v3 0/2] " Sascha Hauer
2021-03-04 12:35 ` [PATCH 1/2] " Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210128143552.GA2042235@infradead.org \
    --to=hch@infradead.org \
    --cc=jack@suse.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=richard@nod.at \
    --cc=s.hauer@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.