[PATCH 1/8] quota: Allow to pass mount path to quotactl
Jan Kara
jack at suse.cz
Mon Jan 25 10:45:07 EST 2021
On Mon 25-01-21 09:38:54, Sascha Hauer wrote:
> On Fri, Jan 22, 2021 at 05:16:58PM +0000, Christoph Hellwig wrote:
> > On Fri, Jan 22, 2021 at 04:15:29PM +0100, Sascha Hauer wrote:
> > > This patch introduces the Q_PATH flag to the quotactl cmd argument.
> > > When given, the path given in the special argument to quotactl will
> > > be the mount path where the filesystem is mounted, instead of a path
> > > to the block device.
> > > This is necessary for filesystems which do not have a block device as
> > > backing store. Particularly this is done for upcoming UBIFS support.
> > >
> > > Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
> >
> > I hate overloading quotactl even more. Why not add a new quotactl_path
> > syscall instead?
>
> We can probably do that. Honza, what do you think?
Hum, yes, probably it would be cleaner to add a new syscall for this so
that we don't overload quotactl(2). I just didn't think of this.
> > > +static struct super_block *quotactl_path(const char __user *special, int cmd)
> > > +{
> > > + struct super_block *sb;
> > > + struct path path;
> > > + int error;
> > > +
> > > + error = user_path_at(AT_FDCWD, special, LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT,
> > > + &path);
> >
> > This adds an overly long line.
>
> ok, will change.
>
> >
> > > + if (error)
> > > + return ERR_PTR(error);
> > > +
> > > + sb = quotactl_sb(path.mnt->mnt_sb->s_dev, cmd);
> >
> > I think quotactl_sb should take the superblock directly. This will
> > need a little refactoring of user_get_super, but will lead to much
> > better logic.
>
> What do you mean by "take"? Take the superblock as an argument to
> quotactl_sb() or take a reference to the superblock?
> Sorry, I don't really get where you aiming at.
I think Christoph was pointing at the fact it is suboptimal to search for
superblock by device number when you already have a pointer to it. And I
guess he was suggesting we could pass 'sb' pointer to quotactl_sb() when we
already have it. Although to be honest, I'm not sure how Christoph imagines
the refactoring of user_get_super() he mentions - when we have a path
looked up through user_path(), that pins the superblock the path is on so
it cannot be unmounted. So perhaps quotactl_sb() can done like:
...
retry:
if (passed_sb) {
sb = passed_sb;
sb->s_count++;
if (excl)
down_write(&sb->s_umount);
else
down_read(&sb->s_umount);
} else {
sb = user_get_super(dev, excl);
if (!sb)
return ERR_PTR(-ENODEV);
}
...
Honza
--
Jan Kara <jack at suse.com>
SUSE Labs, CR
More information about the linux-mtd
mailing list