forked from pool/e2fsprogs
- Update to 1.46.5:
* better handling for resizing to fs sizes which would exceed inode limits * fix crash in e2fsck fastcommit handling * fix possibly lost quota limits when e2fsck corrects quota files * fix tune2fs to properly transfer quota limits when convertion quota files * add support for handling of version 0 quota files in tune2fs * teach libss to use libreadline.so.8 * optimize resize2fs cpu usage for large filesystems * teach libuuid to use getrandom() or getentropy() if available - libss-add-newer-libreadline.so.8-to-dlopen-path.patch: Remove, merged upstream - quota-Add-support-to-version-0-quota-format.patch: Remove, merged upstream - quota-Fold-quota_read_all_dquots-into-quota_update_l.patch: Remove, merged upstream - quota-Rename-quota_update_limits-to-quota_read_all_d.patch: Remove, merged upstream - tune2fs-Fix-conversion-of-quota-files.patch: Remove, merged upstream - e2fsck-Do-not-trash-user-limits-when-processing-orph.patch: Remove, merged upstream - debugfs-Fix-headers-for-quota-commands.patch: Remove, merged upstream - quota-Drop-dead-code.patch: Remove, merged upstream Rev filesystems/146 Md5 9e2aab31302be237de9720afafadd81d 2022-01-28 16:20:43 jankara 949728
This commit is contained in:
parent
bcef51c1aa
commit
bfb3e27b16
@ -1,81 +0,0 @@
|
|||||||
From bdcd8e7bbc374e28fa699031ad2dd83ed4bc70b4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Mon, 23 Aug 2021 16:44:25 +0200
|
|
||||||
Subject: [PATCH 7/8] debugfs: Fix headers for quota commands
|
|
||||||
X-Developer-Signature: v=1; a=openpgp-sha256; l=4088; h=from:subject;
|
|
||||||
bh=DMtVDsyxwY63aIschGhsYoFtaRzgKdcoj+H6ag3wBwA=;
|
|
||||||
b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBhI8GmjMKrGf+RnVrgOxdjhO+t478ULkN2q+GNTt0j
|
|
||||||
Guy1xK+JATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCYSPBpgAKCRCcnaoHP2RA2QAlB/
|
|
||||||
9TcSu83oYIMfsnjdrDQJRJLdaWiCSP5A5IET00b2JGlqWkSjTLUhcJUHPWq5ZB9q2hLp8z4V4DoTBT
|
|
||||||
dsDPDPqSS6PmG5jdbjU29Gz/iOmUSnNl1IDCHhO/HJwg5DA+fbwpIC1tbNfw6XpvvqpTi6yYJ6B1LP
|
|
||||||
byj3D2PLrvqQDtoxc+V90n59U/irl9HqVh6BJOBlhyYvOdbAkvunt6LIsQZvuVmjcpL+TYhcI+S6Ey
|
|
||||||
fkyC3hebYfeKTg/ZQunW3bJkhso+XRQqUPGDTU393G3SFn5lywV2pMhhupdW7Rek0BjymcqDEqyhDS
|
|
||||||
VRa3oN+/KSiVWg1qy2JAM+ErlZu5fU
|
|
||||||
X-Developer-Key: i=jack@suse.cz; a=openpgp;
|
|
||||||
fpr=93C6099A142276A28BBE35D815BC833443038D8C
|
|
||||||
|
|
||||||
list_quota and get_quota commands have 'blocks' header while what they
|
|
||||||
actually show is a used space in bytes. Fix the header to state 'space'
|
|
||||||
instead.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
debugfs/quota.c | 4 ++--
|
|
||||||
tests/f_orphquot/expect | 4 ++--
|
|
||||||
tests/f_quota/expect.0 | 12 ++++++------
|
|
||||||
3 files changed, 10 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
Index: e2fsprogs-1.46.4/debugfs/quota.c
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs-1.46.4.orig/debugfs/quota.c
|
|
||||||
+++ e2fsprogs-1.46.4/debugfs/quota.c
|
|
||||||
@@ -123,7 +123,7 @@ void do_list_quota(int argc, char *argv[
|
|
||||||
|
|
||||||
printf("%7s %2s %8s %8s %8s %8s %8s %8s\n",
|
|
||||||
quota_type[type], "id",
|
|
||||||
- "blocks", "quota", "limit", "inodes", "quota", "limit");
|
|
||||||
+ "space", "quota", "limit", "inodes", "quota", "limit");
|
|
||||||
qh = current_qctx->quota_file[type];
|
|
||||||
retval = qh->qh_ops->scan_dquots(qh, list_quota_callback, NULL);
|
|
||||||
if (retval) {
|
|
||||||
@@ -158,7 +158,7 @@ void do_get_quota(int argc, char *argv[]
|
|
||||||
|
|
||||||
printf("%7s %2s %8s %8s %8s %8s %8s %8s\n",
|
|
||||||
quota_type[type], "id",
|
|
||||||
- "blocks", "quota", "limit", "inodes", "quota", "limit");
|
|
||||||
+ "space", "quota", "limit", "inodes", "quota", "limit");
|
|
||||||
|
|
||||||
qh = current_qctx->quota_file[type];
|
|
||||||
|
|
||||||
Index: e2fsprogs-1.46.4/tests/f_quota/expect.0
|
|
||||||
===================================================================
|
|
||||||
--- e2fsprogs-1.46.4.orig/tests/f_quota/expect.0
|
|
||||||
+++ e2fsprogs-1.46.4/tests/f_quota/expect.0
|
|
||||||
@@ -1,21 +1,21 @@
|
|
||||||
debugfs: list_quota user
|
|
||||||
- user id blocks quota limit inodes quota limit
|
|
||||||
+ user id space quota limit inodes quota limit
|
|
||||||
0 13312 0 0 2 0 0
|
|
||||||
34 1024 0 0 1 0 0
|
|
||||||
100 2048 32 50 2 20 30
|
|
||||||
debugfs: list_quota group
|
|
||||||
- group id blocks quota limit inodes quota limit
|
|
||||||
+ group id space quota limit inodes quota limit
|
|
||||||
0 16384 0 0 5 0 0
|
|
||||||
debugfs: get_quota user 0
|
|
||||||
- user id blocks quota limit inodes quota limit
|
|
||||||
+ user id space quota limit inodes quota limit
|
|
||||||
0 13312 0 0 2 0 0
|
|
||||||
debugfs: get_quota user 100
|
|
||||||
- user id blocks quota limit inodes quota limit
|
|
||||||
+ user id space quota limit inodes quota limit
|
|
||||||
100 2048 32 50 2 20 30
|
|
||||||
debugfs: get_quota user 34
|
|
||||||
- user id blocks quota limit inodes quota limit
|
|
||||||
+ user id space quota limit inodes quota limit
|
|
||||||
34 1024 0 0 1 0 0
|
|
||||||
debugfs: get_quota group 0
|
|
||||||
- group id blocks quota limit inodes quota limit
|
|
||||||
+ group id space quota limit inodes quota limit
|
|
||||||
0 16384 0 0 5 0 0
|
|
||||||
debugfs:
|
|
@ -1,43 +0,0 @@
|
|||||||
From 1f3a91cf868ededb19b3b37caa3352f67e66a10a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Mon, 23 Aug 2021 17:04:52 +0200
|
|
||||||
Subject: [PATCH 5/8] e2fsck: Do not trash user limits when processing orphan
|
|
||||||
list
|
|
||||||
X-Developer-Signature: v=1; a=openpgp-sha256; l=770; h=from:subject;
|
|
||||||
bh=qzGpt7+UOJv3hwzSLcLGr0hCRSh47K/myPGChyylU8U=;
|
|
||||||
b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBhI8GlX5hq3rRf6HziKT8bgW4lwXuVz7w+FuGOUcPK
|
|
||||||
Xw3NgfGJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCYSPBpQAKCRCcnaoHP2RA2R2qCA
|
|
||||||
DhX7BXpS8G05CmyapN9NiAu63JaSVW4o084uvfnud8EdFUMXbOkwGndcOty1Uk09HXfvVkeaZVTmkv
|
|
||||||
pVfz8s4Vi/vjqCPOkxo7HiElNKlm/s/yCGP05ByfwhCqCXKKoaODsbMZJHz4bpUbfxo+qcBD1C0XuE
|
|
||||||
tYgIzL35Jo0rJA65NyBao65L1jTDw4EZGykaYszfZjPayimYg3z2wl0Kv6qT+niYmOw+6w43O6b+6L
|
|
||||||
vgIv8E0XTR0Pc0/JGhfydCSqYM+zoJXpcuURhap0hIo+j3x8FvRGu5ws5tM5Nw0dLmm/MqiDxfBSdA
|
|
||||||
VYBJ83ewrnLu//5q0Kljfxo6T3qN4W
|
|
||||||
X-Developer-Key: i=jack@suse.cz; a=openpgp;
|
|
||||||
fpr=93C6099A142276A28BBE35D815BC833443038D8C
|
|
||||||
|
|
||||||
When e2fsck was loading quotas to process orphan list, it was loading
|
|
||||||
only quota usage. However subsequent quota writeout has effectively
|
|
||||||
overwritten quota limits, loosing them forever. Make sure quota limits
|
|
||||||
are preserved over orphan replay.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
e2fsck/super.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/e2fsck/super.c b/e2fsck/super.c
|
|
||||||
index 75b7b8ffa9b6..4ffafb211e50 100644
|
|
||||||
--- a/e2fsck/super.c
|
|
||||||
+++ b/e2fsck/super.c
|
|
||||||
@@ -282,7 +282,7 @@ static errcode_t e2fsck_read_all_quotas(e2fsck_t ctx)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
retval = quota_read_all_dquots(ctx->qctx, qf_ino, qtype,
|
|
||||||
- QREAD_USAGE);
|
|
||||||
+ QREAD_USAGE | QREAD_LIMITS);
|
|
||||||
if (retval)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
Binary file not shown.
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:b11042533c1b1dcf17512f0da48e05b0c573dada1dd8b762864d10f4dc399713
|
|
||||||
size 7035200
|
|
BIN
e2fsprogs-1.46.5.tar.sign
Normal file
BIN
e2fsprogs-1.46.5.tar.sign
Normal file
Binary file not shown.
3
e2fsprogs-1.46.5.tar.xz
Normal file
3
e2fsprogs-1.46.5.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2f16c9176704cf645dc69d5b15ff704ae722d665df38b2ed3cfc249757d8d81e
|
||||||
|
size 7040672
|
@ -1,3 +1,25 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jan 28 15:40:35 UTC 2022 - Jan Kara <jack@suse.cz>
|
||||||
|
|
||||||
|
- Update to 1.46.5:
|
||||||
|
* better handling for resizing to fs sizes which would exceed inode limits
|
||||||
|
* fix crash in e2fsck fastcommit handling
|
||||||
|
* fix possibly lost quota limits when e2fsck corrects quota files
|
||||||
|
* fix tune2fs to properly transfer quota limits when convertion quota files
|
||||||
|
* add support for handling of version 0 quota files in tune2fs
|
||||||
|
* teach libss to use libreadline.so.8
|
||||||
|
* optimize resize2fs cpu usage for large filesystems
|
||||||
|
* teach libuuid to use getrandom() or getentropy() if available
|
||||||
|
- libss-add-newer-libreadline.so.8-to-dlopen-path.patch: Remove, merged upstream
|
||||||
|
- quota-Add-support-to-version-0-quota-format.patch: Remove, merged upstream
|
||||||
|
- quota-Fold-quota_read_all_dquots-into-quota_update_l.patch: Remove, merged upstream
|
||||||
|
- quota-Rename-quota_update_limits-to-quota_read_all_d.patch: Remove, merged upstream
|
||||||
|
- tune2fs-Fix-conversion-of-quota-files.patch: Remove, merged upstream
|
||||||
|
- e2fsck-Do-not-trash-user-limits-when-processing-orph.patch: Remove, merged upstream
|
||||||
|
- debugfs-Fix-headers-for-quota-commands.patch: Remove, merged upstream
|
||||||
|
- quota-Drop-dead-code.patch: Remove, merged upstream
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Oct 15 12:11:41 UTC 2021 - Johannes Segitz <jsegitz@suse.com>
|
Fri Oct 15 12:11:41 UTC 2021 - Johannes Segitz <jsegitz@suse.com>
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package e2fsprogs
|
# spec file for package e2fsprogs
|
||||||
#
|
#
|
||||||
# Copyright (c) 2021 SUSE LLC
|
# Copyright (c) 2022 SUSE LLC
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -66,7 +66,7 @@ Conflicts: libcom_err2-mini
|
|||||||
Conflicts: libcom_err-mini-devel
|
Conflicts: libcom_err-mini-devel
|
||||||
%endif
|
%endif
|
||||||
#
|
#
|
||||||
Version: 1.46.4
|
Version: 1.46.5
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Utilities for the Second Extended File System
|
Summary: Utilities for the Second Extended File System
|
||||||
License: GPL-2.0-only
|
License: GPL-2.0-only
|
||||||
@ -93,14 +93,6 @@ Patch6: harden_e2scrub@.service.patch
|
|||||||
Patch7: harden_e2scrub_all.service.patch
|
Patch7: harden_e2scrub_all.service.patch
|
||||||
Patch8: harden_e2scrub_fail@.service.patch
|
Patch8: harden_e2scrub_fail@.service.patch
|
||||||
Patch9: harden_e2scrub_reap.service.patch
|
Patch9: harden_e2scrub_reap.service.patch
|
||||||
Patch10: libss-add-newer-libreadline.so.8-to-dlopen-path.patch
|
|
||||||
Patch11: quota-Add-support-to-version-0-quota-format.patch
|
|
||||||
Patch12: quota-Fold-quota_read_all_dquots-into-quota_update_l.patch
|
|
||||||
Patch13: quota-Rename-quota_update_limits-to-quota_read_all_d.patch
|
|
||||||
Patch14: tune2fs-Fix-conversion-of-quota-files.patch
|
|
||||||
Patch15: e2fsck-Do-not-trash-user-limits-when-processing-orph.patch
|
|
||||||
Patch16: debugfs-Fix-headers-for-quota-commands.patch
|
|
||||||
Patch17: quota-Drop-dead-code.patch
|
|
||||||
# Do not suppress make commands
|
# Do not suppress make commands
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
@ -269,14 +261,6 @@ cp %{SOURCE2} .
|
|||||||
%patch7 -p1
|
%patch7 -p1
|
||||||
%patch8 -p1
|
%patch8 -p1
|
||||||
%patch9 -p1
|
%patch9 -p1
|
||||||
%patch10 -p1
|
|
||||||
%patch11 -p1
|
|
||||||
%patch12 -p1
|
|
||||||
%patch13 -p1
|
|
||||||
%patch14 -p1
|
|
||||||
%patch15 -p1
|
|
||||||
%patch16 -p1
|
|
||||||
%patch17 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
|
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
From 0a60ee129b9137a9a5cd49c4dd15247830a7f319 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Fri, 20 Aug 2021 18:12:04 +0200
|
|
||||||
Subject: [PATCH] libss: add newer libreadline.so.8 to dlopen path
|
|
||||||
|
|
||||||
OpenSUSE Tumbleweed now has libreadline.so.8. Add it to the list of libs
|
|
||||||
to look for.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
lib/ss/get_readline.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/ss/get_readline.c b/lib/ss/get_readline.c
|
|
||||||
index 11c72b3387d1..aa1615747934 100644
|
|
||||||
--- a/lib/ss/get_readline.c
|
|
||||||
+++ b/lib/ss/get_readline.c
|
|
||||||
@@ -37,7 +37,7 @@ static void ss_release_readline(ss_data *info)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Libraries we will try to use for readline/editline functionality */
|
|
||||||
-#define DEFAULT_LIBPATH "libreadline.so.7:libreadline.so.6:libreadline.so.5:libreadline.so.4:libreadline.so:libedit.so.2:libedit.so:libeditline.so.0:libeditline.so"
|
|
||||||
+#define DEFAULT_LIBPATH "libreadline.so.8:libreadline.so.7:libreadline.so.6:libreadline.so.5:libreadline.so.4:libreadline.so:libedit.so.2:libedit.so:libeditline.so.0:libeditline.so"
|
|
||||||
|
|
||||||
#ifdef HAVE_DLOPEN
|
|
||||||
void ss_get_readline(int sci_idx)
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,188 +0,0 @@
|
|||||||
From cb060896aac2207ea77479db2e2212ebe7955de9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Fri, 20 Aug 2021 21:18:32 +0200
|
|
||||||
Subject: [PATCH 1/8] quota: Add support to version 0 quota format
|
|
||||||
X-Developer-Signature: v=1; a=openpgp-sha256; l=6268; h=from:subject;
|
|
||||||
bh=UhE03jWwtF7/2Unh5tfHgBCzzdLaSNZ7G9C22vuq4H4=;
|
|
||||||
b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBhI8GhrizE8ehds+qrTxuX1OCIKL+zMflZgbZ3qOb5
|
|
||||||
4X5jnt+JATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCYSPBoQAKCRCcnaoHP2RA2dHMCA
|
|
||||||
CzR/VySs+XXZrCsUYOO3oUzFueRoSJnOAuAUONScP8h7x8fH7wclET0eU/ZGDTMFPrhSIAWjqqwfI8
|
|
||||||
zeFGmbi4GR5BRbsxWNCJnmjwtbxHfOiXsH8KLqT8DyLFl/Svw4yHi9URyIKk4rij2q9AqmA1DTc5M6
|
|
||||||
iMHejidF5w4SbKSmvVYpJi1Ny/TyWXUU9ATzZv01cwjBnMsTw+xq3MD55K9VVZJ9tIF3YZd0PahiT0
|
|
||||||
h/zKA7uQX6W3PKWVuTHkSzjUnsOhKMCX9MxMX6uGXzHBiUsqdCSijVQ6qwBmbwbbz5OZRBRdTfm+0X
|
|
||||||
6fJidGzi6Zcpp/jOs8RIOSu55qCTAb
|
|
||||||
X-Developer-Key: i=jack@suse.cz; a=openpgp;
|
|
||||||
fpr=93C6099A142276A28BBE35D815BC833443038D8C
|
|
||||||
|
|
||||||
Version 0 quota format differs from version 1 by having only 32-bit
|
|
||||||
counters for inodes and block limits. For many installations this is not
|
|
||||||
limiting and thus the format is widely used. Also quota tools still
|
|
||||||
create quota files with this format by default. Add support for this
|
|
||||||
quota format to e2fsprogs so that we can seamlessly convert quota files
|
|
||||||
in this format into our internal quota files.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
lib/support/quotaio_v2.c | 85 +++++++++++++++++++++++++++++++++++++---
|
|
||||||
lib/support/quotaio_v2.h | 17 +++++++-
|
|
||||||
2 files changed, 96 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/support/quotaio_v2.c b/lib/support/quotaio_v2.c
|
|
||||||
index 23717f03f428..a49aa6ac8c2f 100644
|
|
||||||
--- a/lib/support/quotaio_v2.c
|
|
||||||
+++ b/lib/support/quotaio_v2.c
|
|
||||||
@@ -41,6 +41,68 @@ struct quotafile_ops quotafile_ops_2 = {
|
|
||||||
.report = v2_report,
|
|
||||||
};
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Copy dquot from disk to memory
|
|
||||||
+ */
|
|
||||||
+static void v2r0_disk2memdqblk(struct dquot *dquot, void *dp)
|
|
||||||
+{
|
|
||||||
+ struct util_dqblk *m = &dquot->dq_dqb;
|
|
||||||
+ struct v2r0_disk_dqblk *d = dp, empty;
|
|
||||||
+
|
|
||||||
+ dquot->dq_id = ext2fs_le32_to_cpu(d->dqb_id);
|
|
||||||
+ m->dqb_ihardlimit = ext2fs_le32_to_cpu(d->dqb_ihardlimit);
|
|
||||||
+ m->dqb_isoftlimit = ext2fs_le32_to_cpu(d->dqb_isoftlimit);
|
|
||||||
+ m->dqb_bhardlimit = ext2fs_le32_to_cpu(d->dqb_bhardlimit);
|
|
||||||
+ m->dqb_bsoftlimit = ext2fs_le32_to_cpu(d->dqb_bsoftlimit);
|
|
||||||
+ m->dqb_curinodes = ext2fs_le32_to_cpu(d->dqb_curinodes);
|
|
||||||
+ m->dqb_curspace = ext2fs_le64_to_cpu(d->dqb_curspace);
|
|
||||||
+ m->dqb_itime = ext2fs_le64_to_cpu(d->dqb_itime);
|
|
||||||
+ m->dqb_btime = ext2fs_le64_to_cpu(d->dqb_btime);
|
|
||||||
+
|
|
||||||
+ memset(&empty, 0, sizeof(struct v2r0_disk_dqblk));
|
|
||||||
+ empty.dqb_itime = ext2fs_cpu_to_le64(1);
|
|
||||||
+ if (!memcmp(&empty, dp, sizeof(struct v2r0_disk_dqblk)))
|
|
||||||
+ m->dqb_itime = 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Copy dquot from memory to disk
|
|
||||||
+ */
|
|
||||||
+static void v2r0_mem2diskdqblk(void *dp, struct dquot *dquot)
|
|
||||||
+{
|
|
||||||
+ struct util_dqblk *m = &dquot->dq_dqb;
|
|
||||||
+ struct v2r0_disk_dqblk *d = dp;
|
|
||||||
+
|
|
||||||
+ d->dqb_ihardlimit = ext2fs_cpu_to_le32(m->dqb_ihardlimit);
|
|
||||||
+ d->dqb_isoftlimit = ext2fs_cpu_to_le32(m->dqb_isoftlimit);
|
|
||||||
+ d->dqb_bhardlimit = ext2fs_cpu_to_le32(m->dqb_bhardlimit);
|
|
||||||
+ d->dqb_bsoftlimit = ext2fs_cpu_to_le32(m->dqb_bsoftlimit);
|
|
||||||
+ d->dqb_curinodes = ext2fs_cpu_to_le32(m->dqb_curinodes);
|
|
||||||
+ d->dqb_curspace = ext2fs_cpu_to_le64(m->dqb_curspace);
|
|
||||||
+ d->dqb_itime = ext2fs_cpu_to_le64(m->dqb_itime);
|
|
||||||
+ d->dqb_btime = ext2fs_cpu_to_le64(m->dqb_btime);
|
|
||||||
+ d->dqb_id = ext2fs_cpu_to_le32(dquot->dq_id);
|
|
||||||
+ if (qtree_entry_unused(&dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree, dp))
|
|
||||||
+ d->dqb_itime = ext2fs_cpu_to_le64(1);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int v2r0_is_id(void *dp, struct dquot *dquot)
|
|
||||||
+{
|
|
||||||
+ struct v2r0_disk_dqblk *d = dp;
|
|
||||||
+ struct qtree_mem_dqinfo *info =
|
|
||||||
+ &dquot->dq_h->qh_info.u.v2_mdqi.dqi_qtree;
|
|
||||||
+
|
|
||||||
+ if (qtree_entry_unused(info, dp))
|
|
||||||
+ return 0;
|
|
||||||
+ return ext2fs_le32_to_cpu(d->dqb_id) == dquot->dq_id;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static struct qtree_fmt_operations v2r0_fmt_ops = {
|
|
||||||
+ .mem2disk_dqblk = v2r0_mem2diskdqblk,
|
|
||||||
+ .disk2mem_dqblk = v2r0_disk2memdqblk,
|
|
||||||
+ .is_id = v2r0_is_id,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Copy dquot from disk to memory
|
|
||||||
*/
|
|
||||||
@@ -164,7 +226,8 @@ static int v2_check_file(struct quota_handle *h, int type, int fmt)
|
|
||||||
log_err("Your quota file is stored in wrong endianity");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
- if (V2_VERSION != ext2fs_le32_to_cpu(dqh.dqh_version))
|
|
||||||
+ if (V2_VERSION_R0 != ext2fs_le32_to_cpu(dqh.dqh_version) &&
|
|
||||||
+ V2_VERSION_R1 != ext2fs_le32_to_cpu(dqh.dqh_version))
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -174,13 +237,25 @@ static int v2_check_file(struct quota_handle *h, int type, int fmt)
|
|
||||||
*/
|
|
||||||
static int v2_init_io(struct quota_handle *h)
|
|
||||||
{
|
|
||||||
+ struct v2_disk_dqheader dqh;
|
|
||||||
struct v2_disk_dqinfo ddqinfo;
|
|
||||||
struct v2_mem_dqinfo *info;
|
|
||||||
__u64 filesize;
|
|
||||||
+ int version;
|
|
||||||
|
|
||||||
- h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size =
|
|
||||||
- sizeof(struct v2r1_disk_dqblk);
|
|
||||||
- h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = &v2r1_fmt_ops;
|
|
||||||
+ if (!v2_read_header(h, &dqh))
|
|
||||||
+ return -1;
|
|
||||||
+ version = ext2fs_le32_to_cpu(dqh.dqh_version);
|
|
||||||
+
|
|
||||||
+ if (version == V2_VERSION_R0) {
|
|
||||||
+ h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size =
|
|
||||||
+ sizeof(struct v2r0_disk_dqblk);
|
|
||||||
+ h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = &v2r0_fmt_ops;
|
|
||||||
+ } else {
|
|
||||||
+ h->qh_info.u.v2_mdqi.dqi_qtree.dqi_entry_size =
|
|
||||||
+ sizeof(struct v2r1_disk_dqblk);
|
|
||||||
+ h->qh_info.u.v2_mdqi.dqi_qtree.dqi_ops = &v2r1_fmt_ops;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* Read information about quotafile */
|
|
||||||
if (h->e2fs_read(&h->qh_qf, V2_DQINFOOFF, &ddqinfo,
|
|
||||||
@@ -231,7 +306,7 @@ static int v2_new_io(struct quota_handle *h)
|
|
||||||
|
|
||||||
/* Write basic quota header */
|
|
||||||
ddqheader.dqh_magic = ext2fs_cpu_to_le32(file_magics[h->qh_type]);
|
|
||||||
- ddqheader.dqh_version = ext2fs_cpu_to_le32(V2_VERSION);
|
|
||||||
+ ddqheader.dqh_version = ext2fs_cpu_to_le32(V2_VERSION_R1);
|
|
||||||
if (h->e2fs_write(&h->qh_qf, 0, &ddqheader, sizeof(ddqheader)) !=
|
|
||||||
sizeof(ddqheader))
|
|
||||||
return -1;
|
|
||||||
diff --git a/lib/support/quotaio_v2.h b/lib/support/quotaio_v2.h
|
|
||||||
index de2db2785cb0..35054cafaa23 100644
|
|
||||||
--- a/lib/support/quotaio_v2.h
|
|
||||||
+++ b/lib/support/quotaio_v2.h
|
|
||||||
@@ -13,7 +13,8 @@
|
|
||||||
/* Offset of info header in file */
|
|
||||||
#define V2_DQINFOOFF sizeof(struct v2_disk_dqheader)
|
|
||||||
/* Supported version of quota-tree format */
|
|
||||||
-#define V2_VERSION 1
|
|
||||||
+#define V2_VERSION_R1 1
|
|
||||||
+#define V2_VERSION_R0 0
|
|
||||||
|
|
||||||
struct v2_disk_dqheader {
|
|
||||||
__le32 dqh_magic; /* Magic number identifying file */
|
|
||||||
@@ -36,6 +37,20 @@ struct v2_disk_dqinfo {
|
|
||||||
* free entry */
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
+struct v2r0_disk_dqblk {
|
|
||||||
+ __le32 dqb_id; /* id this quota applies to */
|
|
||||||
+ __le32 dqb_ihardlimit; /* absolute limit on allocated inodes */
|
|
||||||
+ __le32 dqb_isoftlimit; /* preferred inode limit */
|
|
||||||
+ __le32 dqb_curinodes; /* current # allocated inodes */
|
|
||||||
+ __le32 dqb_bhardlimit; /* absolute limit on disk space
|
|
||||||
+ * (in QUOTABLOCK_SIZE) */
|
|
||||||
+ __le32 dqb_bsoftlimit; /* preferred limit on disk space
|
|
||||||
+ * (in QUOTABLOCK_SIZE) */
|
|
||||||
+ __le64 dqb_curspace; /* current space occupied (in bytes) */
|
|
||||||
+ __le64 dqb_btime; /* time limit for excessive disk use */
|
|
||||||
+ __le64 dqb_itime; /* time limit for excessive inode use */
|
|
||||||
+} __attribute__ ((packed));
|
|
||||||
+
|
|
||||||
struct v2r1_disk_dqblk {
|
|
||||||
__le32 dqb_id; /* id this quota applies to */
|
|
||||||
__le32 dqb_pad;
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
|||||||
From 32d9f7b1e48f203315890b4d7374f4afd68ce7bb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Mon, 23 Aug 2021 17:09:41 +0200
|
|
||||||
Subject: [PATCH 8/8] quota: Drop dead code
|
|
||||||
X-Developer-Signature: v=1; a=openpgp-sha256; l=1119; h=from:subject;
|
|
||||||
bh=61dKtjVKi3diCfHpa1/d4uDj1elmJCEY1fKv83UzzKA=;
|
|
||||||
b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBhI8GnVlsRAgEc7AzGwJddaA7LDt33ZX+Yj9rady7y
|
|
||||||
42St04GJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCYSPBpwAKCRCcnaoHP2RA2aBMCA
|
|
||||||
COK2Z3O7gobEnW9GHL1bd1MlJOqsYxPxnOp3rFCkB4Kb6V770XUoCCnyeD7NwNxooWZSNOB7JCuyGQ
|
|
||||||
Yl945dec75Yv8zw49bulfVe496hHFX4O4UzAgZKG0vZYAjHpwaEk9Txf3MLpSHxSFlvbH8LE4sT7yD
|
|
||||||
M4wEEznUZokwwRoj+ds12+Rm+P1Sj/AhghUTaPFpuA5RjplBAg728b9f6Ia2JMsNzxoBRksVdOONjU
|
|
||||||
2gtjwbR7Ne2GlN722u71YHItAL0sBAVPIHZQznZEKAZFwEnOHSRWlvwLItLdMfpoMcYXjDJIWz+mXx
|
|
||||||
QbpFU9jSQfiJBn+wba2yVZKohLP403
|
|
||||||
X-Developer-Key: i=jack@suse.cz; a=openpgp;
|
|
||||||
fpr=93C6099A142276A28BBE35D815BC833443038D8C
|
|
||||||
|
|
||||||
Drop unused function from quota support code.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
lib/support/mkquota.c | 20 --------------------
|
|
||||||
1 file changed, 20 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/support/mkquota.c b/lib/support/mkquota.c
|
|
||||||
index 0fefca90c843..a4401b7f77af 100644
|
|
||||||
--- a/lib/support/mkquota.c
|
|
||||||
+++ b/lib/support/mkquota.c
|
|
||||||
@@ -564,26 +564,6 @@ static int scan_dquots_callback(struct dquot *dquot, void *cb_data)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-/*
|
|
||||||
- * Write all memory dquots into quota file
|
|
||||||
- */
|
|
||||||
-#if 0 /* currently unused, but may be useful in the future? */
|
|
||||||
-static errcode_t quota_write_all_dquots(struct quota_handle *qh,
|
|
||||||
- quota_ctx_t qctx)
|
|
||||||
-{
|
|
||||||
- errcode_t err;
|
|
||||||
-
|
|
||||||
- err = ext2fs_read_bitmaps(qctx->fs);
|
|
||||||
- if (err)
|
|
||||||
- return err;
|
|
||||||
- write_dquots(qctx->quota_dict[qh->qh_type], qh);
|
|
||||||
- ext2fs_mark_bb_dirty(qctx->fs);
|
|
||||||
- qctx->fs->flags &= ~EXT2_FLAG_SUPER_ONLY;
|
|
||||||
- ext2fs_write_bitmaps(qctx->fs);
|
|
||||||
- return 0;
|
|
||||||
-}
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
/*
|
|
||||||
* Read quotas from disk and updates the in-memory information determined by
|
|
||||||
* 'flags' from the on-disk data.
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,77 +0,0 @@
|
|||||||
From cbc02e7ef11d5129d090ff49aa1aa57c6ac67fd5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Mon, 23 Aug 2021 16:20:52 +0200
|
|
||||||
Subject: [PATCH 2/8] quota: Fold quota_read_all_dquots() into
|
|
||||||
quota_update_limits()
|
|
||||||
X-Developer-Signature: v=1; a=openpgp-sha256; l=1845; h=from:subject;
|
|
||||||
bh=P7jQb3ZXNuPWs0M0khNUm88nO2ChkOKzT3PGfFt2YNE=;
|
|
||||||
b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBhI8GihdgOLrTUGvgyKLo/9lHgsSXNpuX+TjVHdW+m
|
|
||||||
661Y0fGJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCYSPBogAKCRCcnaoHP2RA2aEPB/
|
|
||||||
9zdPkcMlJKxGzpEO0BmaBNu0c3VbFZR72otTj64Pm1AWxyU9PL288d+VnPov7WSeduPBKtXxmevxAw
|
|
||||||
tR0TYFt4ui8Gr7HLMoTvP7EJ3YX/KZ2mnXnz9JJ5DB2fG07VBbKmcfPKzsxYTUd0Xe5RJU0PYPI62W
|
|
||||||
j8W17jQelcHCNhAJk6oJFP7hPE+dsGUzGthbeQhWrb5zmboB/Ui55mfM1mLaloebpJkg1eqEZzX1jE
|
|
||||||
6T9iEfBSgv5WowKIfJInnXkI+l4UED+Ri1pjuFgBtpWjJEP8ixpFhlo0ULZxfK/OX9sFWQU+Z+opoM
|
|
||||||
Qi0W7Fbb7hR7YZP84xnIbF1FUgHa+l
|
|
||||||
X-Developer-Key: i=jack@suse.cz; a=openpgp;
|
|
||||||
fpr=93C6099A142276A28BBE35D815BC833443038D8C
|
|
||||||
|
|
||||||
There's just one caller of quota_read_all_dquots(), fold it into its
|
|
||||||
caller quota_update_limits(). No functional changes.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
lib/support/mkquota.c | 24 ++++++------------------
|
|
||||||
1 file changed, 6 insertions(+), 18 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/support/mkquota.c b/lib/support/mkquota.c
|
|
||||||
index fbc3833aee98..8e5c61a601cc 100644
|
|
||||||
--- a/lib/support/mkquota.c
|
|
||||||
+++ b/lib/support/mkquota.c
|
|
||||||
@@ -564,23 +564,6 @@ static int scan_dquots_callback(struct dquot *dquot, void *cb_data)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-/*
|
|
||||||
- * Read all dquots from quota file into memory
|
|
||||||
- */
|
|
||||||
-static errcode_t quota_read_all_dquots(struct quota_handle *qh,
|
|
||||||
- quota_ctx_t qctx,
|
|
||||||
- int update_limits EXT2FS_ATTR((unused)))
|
|
||||||
-{
|
|
||||||
- struct scan_dquots_data scan_data;
|
|
||||||
-
|
|
||||||
- scan_data.quota_dict = qctx->quota_dict[qh->qh_type];
|
|
||||||
- scan_data.check_consistency = 0;
|
|
||||||
- scan_data.update_limits = 0;
|
|
||||||
- scan_data.update_usage = 1;
|
|
||||||
-
|
|
||||||
- return qh->qh_ops->scan_dquots(qh, scan_dquots_callback, &scan_data);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/*
|
|
||||||
* Write all memory dquots into quota file
|
|
||||||
*/
|
|
||||||
@@ -607,6 +590,7 @@ static errcode_t quota_write_all_dquots(struct quota_handle *qh,
|
|
||||||
errcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino,
|
|
||||||
enum quota_type qtype)
|
|
||||||
{
|
|
||||||
+ struct scan_dquots_data scan_data;
|
|
||||||
struct quota_handle *qh;
|
|
||||||
errcode_t err;
|
|
||||||
|
|
||||||
@@ -625,7 +609,11 @@ errcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino,
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
- quota_read_all_dquots(qh, qctx, 1);
|
|
||||||
+ scan_data.quota_dict = qctx->quota_dict[qh->qh_type];
|
|
||||||
+ scan_data.check_consistency = 0;
|
|
||||||
+ scan_data.update_limits = 0;
|
|
||||||
+ scan_data.update_usage = 1;
|
|
||||||
+ qh->qh_ops->scan_dquots(qh, scan_dquots_callback, &scan_data);
|
|
||||||
|
|
||||||
err = quota_file_close(qctx, qh);
|
|
||||||
if (err) {
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
|||||||
From f2a7403c6e232aa8dba92d56178d81ba8285fa65 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Mon, 23 Aug 2021 16:32:13 +0200
|
|
||||||
Subject: [PATCH 3/8] quota: Rename quota_update_limits() to
|
|
||||||
quota_read_all_dquots()
|
|
||||||
X-Developer-Signature: v=1; a=openpgp-sha256; l=3796; h=from:subject;
|
|
||||||
bh=EWzfurjfbAs2HTtmIoM8glu+EY0nvkRwYkafyLH0vAw=;
|
|
||||||
b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBhI8GjQ7OLyPGH5e21pa5vzRbAJrBUX2fqN9Cishyr
|
|
||||||
zRhheaOJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCYSPBowAKCRCcnaoHP2RA2fqAB/
|
|
||||||
99OFSOi1posHQs9IivQagLwUAxytNoe9VWRoUqypcx5DFtbSItNlcyRCRxmouxUdpTyWR3BoYfDz97
|
|
||||||
/R2KsPNu9XU6oA2NiC7WcmNdSJ0ay+sRuXy2EF5FxCvXjB4xN7pUu7QEEjcQXOYOwIsdEDQru+eajq
|
|
||||||
NK05uq6j0Zb/zelJ9VkTA0iKkiCkKGNYZlCUkn3x+E8wTb4RCbywnAynC6RXFlmt+EnaxxHoGCsJGv
|
|
||||||
TLIe+yhPDECdjW39RZWYV87fRRGDRiVnuDFR0uj0QRFY1unELcy+Z72lySrH9X3SZl9VB72WKvofFb
|
|
||||||
Ar8ofkj4dd4g8RTr9WRC+h9b1kwnNk
|
|
||||||
X-Developer-Key: i=jack@suse.cz; a=openpgp;
|
|
||||||
fpr=93C6099A142276A28BBE35D815BC833443038D8C
|
|
||||||
|
|
||||||
quota_update_limits() is a misnomer because what it actually does is
|
|
||||||
that it updates 'usage' counters and leaves 'limit' counters intact.
|
|
||||||
Rename quota_update_limits() to quota_read_all_dquots() and while
|
|
||||||
changing prototype also add a flags argument so that callers can control
|
|
||||||
which quota information is actually updated from the disk.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
e2fsck/super.c | 3 ++-
|
|
||||||
lib/support/mkquota.c | 11 ++++++-----
|
|
||||||
lib/support/quotaio.h | 7 +++++--
|
|
||||||
misc/tune2fs.c | 5 +++--
|
|
||||||
4 files changed, 16 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/e2fsck/super.c b/e2fsck/super.c
|
|
||||||
index e1c3f93572f4..75b7b8ffa9b6 100644
|
|
||||||
--- a/e2fsck/super.c
|
|
||||||
+++ b/e2fsck/super.c
|
|
||||||
@@ -281,7 +281,8 @@ static errcode_t e2fsck_read_all_quotas(e2fsck_t ctx)
|
|
||||||
if (qf_ino == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- retval = quota_update_limits(ctx->qctx, qf_ino, qtype);
|
|
||||||
+ retval = quota_read_all_dquots(ctx->qctx, qf_ino, qtype,
|
|
||||||
+ QREAD_USAGE);
|
|
||||||
if (retval)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
diff --git a/lib/support/mkquota.c b/lib/support/mkquota.c
|
|
||||||
index 8e5c61a601cc..0fefca90c843 100644
|
|
||||||
--- a/lib/support/mkquota.c
|
|
||||||
+++ b/lib/support/mkquota.c
|
|
||||||
@@ -585,10 +585,11 @@ static errcode_t quota_write_all_dquots(struct quota_handle *qh,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
- * Updates the in-memory quota limits from the given quota inode.
|
|
||||||
+ * Read quotas from disk and updates the in-memory information determined by
|
|
||||||
+ * 'flags' from the on-disk data.
|
|
||||||
*/
|
|
||||||
-errcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino,
|
|
||||||
- enum quota_type qtype)
|
|
||||||
+errcode_t quota_read_all_dquots(quota_ctx_t qctx, ext2_ino_t qf_ino,
|
|
||||||
+ enum quota_type qtype, unsigned int flags)
|
|
||||||
{
|
|
||||||
struct scan_dquots_data scan_data;
|
|
||||||
struct quota_handle *qh;
|
|
||||||
@@ -611,8 +612,8 @@ errcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino,
|
|
||||||
|
|
||||||
scan_data.quota_dict = qctx->quota_dict[qh->qh_type];
|
|
||||||
scan_data.check_consistency = 0;
|
|
||||||
- scan_data.update_limits = 0;
|
|
||||||
- scan_data.update_usage = 1;
|
|
||||||
+ scan_data.update_limits = !!(flags & QREAD_LIMITS);
|
|
||||||
+ scan_data.update_usage = !!(flags & QREAD_USAGE);
|
|
||||||
qh->qh_ops->scan_dquots(qh, scan_dquots_callback, &scan_data);
|
|
||||||
|
|
||||||
err = quota_file_close(qctx, qh);
|
|
||||||
diff --git a/lib/support/quotaio.h b/lib/support/quotaio.h
|
|
||||||
index 6068970009f5..84fac35dda20 100644
|
|
||||||
--- a/lib/support/quotaio.h
|
|
||||||
+++ b/lib/support/quotaio.h
|
|
||||||
@@ -224,8 +224,11 @@ void quota_data_add(quota_ctx_t qctx, struct ext2_inode_large *inode,
|
|
||||||
void quota_data_sub(quota_ctx_t qctx, struct ext2_inode_large *inode,
|
|
||||||
ext2_ino_t ino, qsize_t space);
|
|
||||||
errcode_t quota_write_inode(quota_ctx_t qctx, enum quota_type qtype);
|
|
||||||
-errcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino,
|
|
||||||
- enum quota_type type);
|
|
||||||
+/* Flags for quota_read_all_dquots() */
|
|
||||||
+#define QREAD_USAGE 0x01
|
|
||||||
+#define QREAD_LIMITS 0x02
|
|
||||||
+errcode_t quota_read_all_dquots(quota_ctx_t qctx, ext2_ino_t qf_ino,
|
|
||||||
+ enum quota_type type, unsigned int flags);
|
|
||||||
errcode_t quota_compute_usage(quota_ctx_t qctx);
|
|
||||||
void quota_release_context(quota_ctx_t *qctx);
|
|
||||||
errcode_t quota_remove_inode(ext2_filsys fs, enum quota_type qtype);
|
|
||||||
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
|
|
||||||
index f739f16cd62b..bb08f8026918 100644
|
|
||||||
--- a/misc/tune2fs.c
|
|
||||||
+++ b/misc/tune2fs.c
|
|
||||||
@@ -1671,8 +1671,9 @@ static int handle_quota_options(ext2_filsys fs)
|
|
||||||
if (quota_enable[qtype] == QOPT_ENABLE &&
|
|
||||||
*quota_sb_inump(fs->super, qtype) == 0) {
|
|
||||||
if ((qf_ino = quota_file_exists(fs, qtype)) > 0) {
|
|
||||||
- retval = quota_update_limits(qctx, qf_ino,
|
|
||||||
- qtype);
|
|
||||||
+ retval = quota_read_all_dquots(qctx, qf_ino,
|
|
||||||
+ qtype,
|
|
||||||
+ QREAD_USAGE);
|
|
||||||
if (retval) {
|
|
||||||
com_err(program_name, retval,
|
|
||||||
_("while updating quota limits (%d)"),
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
|||||||
From 5d446b4969ee6cb4025f576158be562c87d57142 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Kara <jack@suse.cz>
|
|
||||||
Date: Fri, 20 Aug 2021 21:35:34 +0200
|
|
||||||
Subject: [PATCH 4/8] tune2fs: Fix conversion of quota files
|
|
||||||
X-Developer-Signature: v=1; a=openpgp-sha256; l=1210; h=from:subject;
|
|
||||||
bh=Lx1UJPZNLgsKBmmbN+0GUP40hOyhJD5D9kEVqqVigg4=;
|
|
||||||
b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBhI8GkUaN9eZsgn0XvL7BSjbTu57jpbJHkTGpEei61
|
|
||||||
KG+q9pGJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCYSPBpAAKCRCcnaoHP2RA2Z7NB/
|
|
||||||
4osbGPQGrmAwHVUJEqkXAxOBazQE/W3qiykm9uUmzeBGC++5nQzo1J05nb479mQY84Lu8j1Mhbloh8
|
|
||||||
vtdLdJ0HVHxHQrY058HIXBQfAYlLV0pN6/qRNCVelyjdqQVTjri8oD+TVCjsu4aaTu9ZLZCYM41w5s
|
|
||||||
gweKqj260PJ93IL025nGha6ZL2BsenQy/tKRG7/I9O/c6YUAFKSvXDJ0M/L4XtgMTKxzROSiKDmy8h
|
|
||||||
gEw2Gc9oCZLISL2ulhLJ6ppxQ7jcbvoTuZmdFxhbQIfs8gQnmxlGcQLWs5fDMIKfux5qBwQGnYIC1u
|
|
||||||
jZOGndUvcOaDO3Zexb1ik8pxnpIi+F
|
|
||||||
X-Developer-Key: i=jack@suse.cz; a=openpgp;
|
|
||||||
fpr=93C6099A142276A28BBE35D815BC833443038D8C
|
|
||||||
|
|
||||||
When tune2fs is enabling quota feature, it looks for old-style quota
|
|
||||||
files and tries to transfer limits stored in these files into newly
|
|
||||||
created hidded quota files. However the code doing the transfer setups
|
|
||||||
the quota scan wrongly and instead of transferring limits we transfer
|
|
||||||
usage. So not only quota limits are lost (at least they can still be
|
|
||||||
recovered from the old quota files) but also usage information may be
|
|
||||||
wrong if the accounting in e2fsprogs does not exactly match the
|
|
||||||
accounting in quota-tools (which is actually the case). Fix the setup of
|
|
||||||
the quota scan.
|
|
||||||
|
|
||||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
|
||||||
---
|
|
||||||
misc/tune2fs.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/misc/tune2fs.c b/misc/tune2fs.c
|
|
||||||
index bb08f8026918..0f6ef3d6df6b 100644
|
|
||||||
--- a/misc/tune2fs.c
|
|
||||||
+++ b/misc/tune2fs.c
|
|
||||||
@@ -1673,7 +1673,7 @@ static int handle_quota_options(ext2_filsys fs)
|
|
||||||
if ((qf_ino = quota_file_exists(fs, qtype)) > 0) {
|
|
||||||
retval = quota_read_all_dquots(qctx, qf_ino,
|
|
||||||
qtype,
|
|
||||||
- QREAD_USAGE);
|
|
||||||
+ QREAD_LIMITS);
|
|
||||||
if (retval) {
|
|
||||||
com_err(program_name, retval,
|
|
||||||
_("while updating quota limits (%d)"),
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user