From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6874FC77B75 for ; Fri, 21 Apr 2023 10:47:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DD6C96B0071; Fri, 21 Apr 2023 06:47:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D87D56B0072; Fri, 21 Apr 2023 06:47:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C4F206B0074; Fri, 21 Apr 2023 06:47:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id B26F16B0071 for ; Fri, 21 Apr 2023 06:47:47 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 837DD160693 for ; Fri, 21 Apr 2023 10:47:47 +0000 (UTC) X-FDA: 80705072574.05.CDF5F7D Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by imf25.hostedemail.com (Postfix) with ESMTP id 478C9A0026 for ; Fri, 21 Apr 2023 10:47:45 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=EIevZDxK; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=vk9eI6VE; spf=pass (imf25.hostedemail.com: domain of jack@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=jack@suse.cz; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1682074065; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4pkvpqYpTTTdKct/ljbjhP6YZDlGJ88YB/YoGZSHrjc=; b=F8HZ4dqZOI4+rZkyZaC/LHgg+KZAVOwWcSwNF2AP6Lui2LJoWo4GoY/rEJfWHrhXQOQ7P6 1quOMSoqonZ/kESoqYeDIzFiD1TzdmwERkmDD75slK1+6yKQWcT+Oxc+mrHZ5F5r0h0Y5L xHvpQF8q0fOZfptSehOItxudjccEUYI= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=EIevZDxK; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=vk9eI6VE; spf=pass (imf25.hostedemail.com: domain of jack@suse.cz designates 195.135.220.29 as permitted sender) smtp.mailfrom=jack@suse.cz; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1682074065; a=rsa-sha256; cv=none; b=d6BBJJ/lV8o5Qo+BPiN1YIhSi2nNV/BNZOvgV5FHybyWc31bkc4W0UzC39C5i6e6BJuC/Z RD2CBLyYxEnO19/InslaLRJl5KVC+X1sI0RgwxCqS1Q/aL6n83uCGugTOqcaYkCzMtXm0b PpD+GGxJKZUGYGRyRRDVSZATN4EojEA= Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 03B051FDDC; Fri, 21 Apr 2023 10:47:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1682074064; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=4pkvpqYpTTTdKct/ljbjhP6YZDlGJ88YB/YoGZSHrjc=; b=EIevZDxKnimoOkGUE8AIspOXO/Fio2rzzBm5JoSLeAdYQspUlWpOsmY2GcO+z4BlERJ0wU IZH29iyzI4Wn3Uz0bdGmuVTLcnwNCWZ5P66HinNVCAj8PoBnHmo0ddtJk9jnk/7VpnZjnP QeXvTuBIsz/GaIqjWnqaFAg5elnsUeg= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1682074064; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=4pkvpqYpTTTdKct/ljbjhP6YZDlGJ88YB/YoGZSHrjc=; b=vk9eI6VEAY7psJx40HGRRAAxyZUofgDsBSb8dLYs0I3SDMoQleT/OqTrMJZdIpxbEWleD9 47Xc7HabF+mvqdAQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id DDEF11390E; Fri, 21 Apr 2023 10:47:43 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id QsgmNs9pQmRRewAAMHmgww (envelope-from ); Fri, 21 Apr 2023 10:47:43 +0000 Received: by quack3.suse.cz (Postfix, from userid 1000) id 74811A0729; Fri, 21 Apr 2023 12:47:43 +0200 (CEST) Date: Fri, 21 Apr 2023 12:47:43 +0200 From: Jan Kara To: Carlos Maiolino Cc: Jan Kara , hughd@google.com, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, djwong@kernel.org Subject: Re: [PATCH 6/6] Add default quota limit mount options Message-ID: <20230421104743.ieehvkcjw3vxy3qe@quack3> References: <20230420080359.2551150-1-cem@kernel.org> <20230420080359.2551150-7-cem@kernel.org> <20230420143954.asmpkta4tknyzcda@quack3> <20230421102042.re3mij2avpvyilek@andromeda> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230421102042.re3mij2avpvyilek@andromeda> X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 478C9A0026 X-Stat-Signature: zbhh41rdoewmsnbtz71kakfz6w7tbi49 X-HE-Tag: 1682074065-704812 X-HE-Meta: U2FsdGVkX19fRSajOb2qgEoth/efHb7b3Q7L+0xxMO8VDr5NLnFxnRgV9fJdZU6+ge6kZqvxXXzml1JdxPPlgyeeX/57GNSa9xtbS/LUSyyJWHPeQP3pyPrxa6LTO4yr+rT65xYGoH/S9EMGQqJwFN3O49rludYupUzWVfOPWu3gWj9CaqCIw48n/+g4DXTf7BlRWk+Uoa1ez9wVbxo2r/3YbVaB4Dsb+nEMSOfbkyH1F0lFW7n67aHCJl8mdMkkzQUezpiEx9QM5hjB6g9XAv1Y0M8W+vUbjh3Az0oxy0tl377z7IQuHCBpT5Acy5cAZIVyjv2FsNcIZzsVqZUEa7yG6WXu1oMWOSZKYzNB/jIbNQFOEupK7/hMw8rB7wDkN6ooQ81GNLzeVvwU3nW8StP46/SjUME0egaMd1+49SQBb7/QvgR5Ojhen8W2UrHMot/xyofervD6kbbYPWj0txkAVYSgOrcFGXc65cNyEaUBELrxCQ4KCGszlely58GUGFCWoBvb5L+BCJGApx+LwIBW6dnCkwvb15FWiVDxZcU0r+PRmWKM2+tuxjuvGv9f441ej8SwG6eUNwiI4C8s3O9U9CFSOoAhQ2uR2p6eJD0hvL7ZYzGIV2AWmMMy4pzOWFunRsLhH3eFs28Ingz8KsUmDJakY7DR4jkFOwlX44ZuNnB6zDuKBs/HCjJrr+mFMfPovFvNDKa3n1wWhSFBjRHYOxPoK11X3SvEa8URI2W7pp62CHDqpzN6A9WWIwKlXDHbiNI3yraLlzV+ETRNkX1D7njZ6LDt7mXI8CRFlDBFMtSmU0QegssThiI/1Oxys52IADlbGyB1mrkBrr8Jo4vWH9mqRoyTcmLbCzTmzyg9N8Rb1zRZrbS8jZUK9T5dCdurakIbxRDo9o+0hN9L3z80leq/+G2OJvod2z23UQjF3ClF6S0GTKKNExolydlIs/GmcvO9cKIwMmzfGf4 ybYOqULn GKpVG/0J724A2DBP8MfooYCQt7fN0XI5P5Y8SyrFSYljocNdl3AevkZfpZzdc5CneCFR3U2jQRR4R+3WjDUZQ36YVOoBTY6ZJM7kSQmU+TxoAOFdpHs5H0N7aL1/0k4XBhF81hAjDgYuuss92Y8PI9WL9JUX92aYGkHH4Jj1v7dDjczboO5M91I1DbaWMuk6Ki4i492RF/qOE8wOJxd5sDhE4Iz/rOlu0Dw7yuxbB7OdXaQ+imHtRwlmZyYL8LpAl4dlWfBtn3WYdB5kNi/Owr+XQ3cSBOCkZwbNfvHQLjOWPFppHxMaMznBAUQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Fri 21-04-23 12:20:42, Carlos Maiolino wrote: > On Thu, Apr 20, 2023 at 04:39:54PM +0200, Jan Kara wrote: > > On Thu 20-04-23 10:03:59, cem@kernel.org wrote: > > > @@ -3714,6 +3723,50 @@ static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param) > > > ctx->seen |= SHMEM_SEEN_QUOTA; > > > ctx->quota_types |= QTYPE_MASK_GRP; > > > break; > > > + case Opt_usrquota_block_hardlimit: > > > + size = memparse(param->string, &rest); > > > + if (*rest || !size) > > > + goto bad_value; > > > + if (size > SHMEM_QUOTA_MAX_SPC_LIMIT) > > > + return invalfc(fc, > > > + "User quota block hardlimit too large."); > > > + ctx->qlimits.usrquota_bhardlimit = size; > > > + ctx->seen |= SHMEM_SEEN_QUOTA; > > > + ctx->quota_types |= QTYPE_MASK_USR; > > > > So if I get it right, the intention here is that if > > usrquota_block_hardlimit=value option is used, it automatically enables > > user quota accounting and enforcement. I guess it is logical but it is not > > documented and I'd prefer to require explicit usrquota mount option to > > enable accounting & enforcement - it is then e.g. easier to parse mount > > options (in userspace) for finding out whether enforcement is enabled or > > not. > > Hmmm, I think I see what you mean. I can make usrquota_block_hardlimit options > to not actually set the quota flag on quota_types, so this should be explicitly > set by usrquota/grpquota options. Does that work for you? Yes, works for me! > > Also I can imagine we would allow changing the default limits on > > remount but it isn't easy to enable quota accounting on remount etc. > > > > hmm, yes, maybe enabling default limits to be changed on remount isn't a big > deal, once the quota is already enabled, so everything is already in place. Exactly. I don't say you have to do it now as I don't think that is super useful. But if there's a demand we can easily do it. > > > diff --git a/mm/shmem_quota.c b/mm/shmem_quota.c > > > index c0b531e2ef688..3cc53f2c35e2c 100644 > > > --- a/mm/shmem_quota.c > > > +++ b/mm/shmem_quota.c > > > @@ -166,6 +166,7 @@ static int shmem_acquire_dquot(struct dquot *dquot) > > > { > > > struct mem_dqinfo *info = sb_dqinfo(dquot->dq_sb, dquot->dq_id.type); > > > struct rb_node **n = &((struct rb_root *)info->dqi_priv)->rb_node; > > > + struct shmem_sb_info *sbinfo = dquot->dq_sb->s_fs_info; > > > struct rb_node *parent = NULL, *new_node = NULL; > > > struct quota_id *new_entry, *entry; > > > qid_t id = from_kqid(&init_user_ns, dquot->dq_id); > > > @@ -195,6 +196,14 @@ static int shmem_acquire_dquot(struct dquot *dquot) > > > } > > > > > > new_entry->id = id; > > > + if (dquot->dq_id.type == USRQUOTA) { > > > + new_entry->bhardlimit = sbinfo->qlimits.usrquota_bhardlimit; > > > + new_entry->ihardlimit = sbinfo->qlimits.usrquota_ihardlimit; > > > + } else if (dquot->dq_id.type == GRPQUOTA) { > > > + new_entry->bhardlimit = sbinfo->qlimits.grpquota_bhardlimit; > > > + new_entry->ihardlimit = sbinfo->qlimits.grpquota_ihardlimit; > > > + } > > > + > > > new_node = &new_entry->node; > > > rb_link_node(new_node, parent, n); > > > rb_insert_color(new_node, (struct rb_root *)info->dqi_priv); > > > > Maybe in shmem_dquot_release() when usage is 0 and limits are at default > > limits, we can free the structure? > > hmmm, which struct are you talking about? quota_id? As we do for DQ_FAKE? Yes. Honza -- Jan Kara SUSE Labs, CR