[dovecot-cvs] dovecot/src/plugins/quota quota-dirsize.c, 1.7,
1.8 quota-fs.c, 1.9, 1.10 quota-maildir.c, 1.1,
1.2 quota-private.h, 1.6, 1.7 quota.c, 1.7, 1.8
tss-movial at dovecot.org
tss-movial at dovecot.org
Mon Mar 6 17:48:36 EET 2006
- Previous message: [dovecot-cvs] dovecot/src/plugins/quota Makefile.am, 1.4,
1.5 quota-dict.c, 1.8, 1.9 quota-dirsize.c, 1.6,
1.7 quota-maildir.c, NONE, 1.1 quota-private.h, 1.5,
1.6 quota.c, 1.6, 1.7
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-mail.c,
1.20, 1.21
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/cvs/dovecot/src/plugins/quota
In directory talvi:/tmp/cvs-serv24127
Modified Files:
quota-dirsize.c quota-fs.c quota-maildir.c quota-private.h
quota.c
Log Message:
Cleanups.
Index: quota-dirsize.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/plugins/quota/quota-dirsize.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- quota-dirsize.c 6 Mar 2006 10:31:11 -0000 1.7
+++ quota-dirsize.c 6 Mar 2006 15:48:33 -0000 1.8
@@ -206,6 +206,7 @@
}
ctx->bytes_limit = root->storage_limit * 1024;
+ ctx->count_limit = (uint64_t)-1;
return ctx;
}
@@ -218,66 +219,6 @@
return ret;
}
-static void
-dirsize_quota_transaction_rollback(struct quota_root_transaction_context *ctx)
-{
- i_free(ctx);
-}
-
-static int
-dirsize_quota_try_alloc_bytes(struct quota_root_transaction_context *ctx,
- uoff_t size, bool *too_large_r)
-{
- if (ctx->bytes_current == (uint64_t)-1)
- return -1;
-
- *too_large_r = size > ctx->bytes_limit;
-
- if (ctx->bytes_current + ctx->bytes_diff + size > ctx->bytes_limit)
- return 0;
-
- ctx->bytes_diff += size;
- return 1;
-}
-
-static int
-dirsize_quota_try_alloc(struct quota_root_transaction_context *ctx,
- struct mail *mail, bool *too_large_r)
-{
- uoff_t size;
-
- if (ctx->bytes_current == (uint64_t)-1)
- return -1;
-
- size = mail_get_physical_size(mail);
- if (size == (uoff_t)-1)
- return -1;
-
- return dirsize_quota_try_alloc_bytes(ctx, size, too_large_r);
-}
-
-static void
-dirsize_quota_alloc(struct quota_root_transaction_context *ctx,
- struct mail *mail)
-{
- uoff_t size;
-
- size = mail_get_physical_size(mail);
- if (size != (uoff_t)-1)
- ctx->bytes_diff += size;
-}
-
-static void
-dirsize_quota_free(struct quota_root_transaction_context *ctx,
- struct mail *mail)
-{
- uoff_t size;
-
- size = mail_get_physical_size(mail);
- if (size != (uoff_t)-1)
- ctx->bytes_diff -= size;
-}
-
struct quota_backend quota_backend_dirsize = {
"dirsize",
@@ -295,11 +236,11 @@
dirsize_quota_transaction_begin,
dirsize_quota_transaction_commit,
- dirsize_quota_transaction_rollback,
+ quota_default_transaction_rollback,
- dirsize_quota_try_alloc,
- dirsize_quota_try_alloc_bytes,
- dirsize_quota_alloc,
- dirsize_quota_free
+ quota_default_try_alloc,
+ quota_default_try_alloc_bytes,
+ quota_default_alloc,
+ quota_default_free
}
};
Index: quota-fs.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/plugins/quota/quota-fs.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- quota-fs.c 1 Mar 2006 09:15:03 -0000 1.9
+++ quota-fs.c 6 Mar 2006 15:48:33 -0000 1.10
@@ -307,6 +307,7 @@
root_ctx = i_new(struct quota_root_transaction_context, 1);
root_ctx->root = root;
root_ctx->ctx = ctx;
+ root_ctx->disabled = TRUE;
return root_ctx;
}
@@ -317,45 +318,6 @@
return 0;
}
-static void
-fs_quota_transaction_rollback(struct quota_root_transaction_context *ctx)
-{
- i_free(ctx);
-}
-
-static int
-fs_quota_try_alloc(struct quota_root_transaction_context *ctx __attr_unused__,
- struct mail *mail __attr_unused__,
- bool *too_large_r __attr_unused__)
-{
- /* no-op */
- return 1;
-}
-
-static int
-fs_quota_try_alloc_bytes(struct quota_root_transaction_context *ctx
- __attr_unused__,
- uoff_t size __attr_unused__,
- bool *too_large_r __attr_unused__)
-{
- /* no-op */
- return 1;
-}
-
-static void
-fs_quota_alloc(struct quota_root_transaction_context *ctx __attr_unused__,
- struct mail *mail __attr_unused__)
-{
- /* no-op */
-}
-
-static void
-fs_quota_free(struct quota_root_transaction_context *ctx __attr_unused__,
- struct mail *mail __attr_unused__)
-{
- /* no-op */
-}
-
struct quota_backend quota_backend_fs = {
"fs",
@@ -373,12 +335,12 @@
fs_quota_transaction_begin,
fs_quota_transaction_commit,
- fs_quota_transaction_rollback,
+ quota_default_transaction_rollback,
- fs_quota_try_alloc,
- fs_quota_try_alloc_bytes,
- fs_quota_alloc,
- fs_quota_free
+ quota_default_try_alloc,
+ quota_default_try_alloc_bytes,
+ quota_default_alloc,
+ quota_default_free
}
};
Index: quota-maildir.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/plugins/quota/quota-maildir.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- quota-maildir.c 6 Mar 2006 10:31:11 -0000 1.1
+++ quota-maildir.c 6 Mar 2006 15:48:33 -0000 1.2
@@ -582,7 +582,10 @@
ctx->ctx = _ctx;
if (maildirquota_refresh(root,
- maildir_quota_root_get_storage(_root)) == 0) {
+ maildir_quota_root_get_storage(_root)) < 0) {
+ /* failed calculating the current quota */
+ ctx->bytes_current = (uint64_t)-1;
+ } else {
ctx->bytes_limit = root->message_bytes_limit;
ctx->count_limit = root->message_count_limit;
ctx->bytes_current = root->total_bytes;
@@ -596,74 +599,16 @@
{
struct maildir_quota_root *root =
(struct maildir_quota_root *)ctx->root;
+ int ret = ctx->bytes_current == (uint64_t)-1 ? -1 : 0;
- if (root->fd != -1) {
+ if (root->fd != -1 && ret == 0) {
/* if writing fails, we don't care all that much */
(void)maildirsize_update(root,
maildir_quota_root_get_storage(ctx->root),
ctx->count_diff, ctx->bytes_diff);
}
i_free(ctx);
- return 0;
-}
-
-static void
-maildir_quota_transaction_rollback(struct quota_root_transaction_context *ctx)
-{
- i_free(ctx);
-}
-
-static int
-maildir_quota_try_alloc_bytes(struct quota_root_transaction_context *ctx,
- uoff_t size, bool *too_large_r)
-{
- *too_large_r = size > ctx->bytes_limit;
-
- if (ctx->bytes_current + ctx->bytes_diff + size > ctx->bytes_limit)
- return 0;
- if (ctx->count_current + ctx->count_diff + 1 > ctx->count_limit)
- return 0;
-
- ctx->count_diff++;
- ctx->bytes_diff += size;
- return 1;
-}
-
-static int
-maildir_quota_try_alloc(struct quota_root_transaction_context *ctx,
- struct mail *mail, bool *too_large_r)
-{
- uoff_t size;
-
- size = mail_get_physical_size(mail);
- if (size == (uoff_t)-1)
- return -1;
-
- return maildir_quota_try_alloc_bytes(ctx, size, too_large_r);
-}
-
-static void
-maildir_quota_alloc(struct quota_root_transaction_context *ctx,
- struct mail *mail)
-{
- uoff_t size;
-
- size = mail_get_physical_size(mail);
- if (size != (uoff_t)-1)
- ctx->bytes_diff += size;
- ctx->count_diff++;
-}
-
-static void
-maildir_quota_free(struct quota_root_transaction_context *ctx,
- struct mail *mail)
-{
- uoff_t size;
-
- size = mail_get_physical_size(mail);
- if (size != (uoff_t)-1)
- ctx->bytes_diff -= size;
- ctx->count_diff--;
+ return ret;
}
struct quota_backend quota_backend_maildir = {
@@ -683,11 +628,11 @@
maildir_quota_transaction_begin,
maildir_quota_transaction_commit,
- maildir_quota_transaction_rollback,
+ quota_default_transaction_rollback,
- maildir_quota_try_alloc,
- maildir_quota_try_alloc_bytes,
- maildir_quota_alloc,
- maildir_quota_free
+ quota_default_try_alloc,
+ quota_default_try_alloc_bytes,
+ quota_default_alloc,
+ quota_default_free
}
};
Index: quota-private.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/plugins/quota/quota-private.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- quota-private.h 6 Mar 2006 10:31:11 -0000 1.6
+++ quota-private.h 6 Mar 2006 15:48:33 -0000 1.7
@@ -99,6 +99,8 @@
uint64_t bytes_limit, count_limit;
uint64_t bytes_current, count_current;
+
+ unsigned int disabled:1;
};
/* Register storage to all user's quota roots. */
@@ -113,4 +115,16 @@
void quota_set_error(struct quota *quota, const char *errormsg);
+/* default simple implementations for bytes/count updating */
+void
+quota_default_transaction_rollback(struct quota_root_transaction_context *ctx);
+int quota_default_try_alloc_bytes(struct quota_root_transaction_context *ctx,
+ uoff_t size, bool *too_large_r);
+int quota_default_try_alloc(struct quota_root_transaction_context *ctx,
+ struct mail *mail, bool *too_large_r);
+void quota_default_alloc(struct quota_root_transaction_context *ctx,
+ struct mail *mail);
+void quota_default_free(struct quota_root_transaction_context *ctx,
+ struct mail *mail);
+
#endif
Index: quota.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/plugins/quota/quota.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- quota.c 6 Mar 2006 10:31:11 -0000 1.7
+++ quota.c 6 Mar 2006 15:48:33 -0000 1.8
@@ -362,3 +362,79 @@
i_free(quota->last_error);
quota->last_error = i_strdup(errormsg);
}
+
+void
+quota_default_transaction_rollback(struct quota_root_transaction_context *ctx)
+{
+ i_free(ctx);
+}
+
+int quota_default_try_alloc_bytes(struct quota_root_transaction_context *ctx,
+ uoff_t size, bool *too_large_r)
+{
+ if (ctx->disabled) {
+ *too_large_r = FALSE;
+ return 1;
+ }
+ if (ctx->bytes_current == (uint64_t)-1) {
+ /* failure in transaction initialization */
+ return -1;
+ }
+
+ *too_large_r = size > ctx->bytes_limit;
+
+ if (ctx->bytes_current + ctx->bytes_diff + size > ctx->bytes_limit)
+ return 0;
+ if (ctx->count_current + ctx->count_diff + 1 > ctx->count_limit)
+ return 0;
+
+ ctx->count_diff++;
+ ctx->bytes_diff += size;
+ return 1;
+}
+
+int quota_default_try_alloc(struct quota_root_transaction_context *ctx,
+ struct mail *mail, bool *too_large_r)
+{
+ uoff_t size;
+
+ if (ctx->disabled)
+ return 1;
+
+ size = mail_get_physical_size(mail);
+ if (size == (uoff_t)-1) {
+ mail_storage_set_critical(mail->box->storage,
+ "Quota: Couldn't get new message's size");
+ return -1;
+ }
+
+ return quota_default_try_alloc_bytes(ctx, size, too_large_r);
+}
+
+void quota_default_alloc(struct quota_root_transaction_context *ctx,
+ struct mail *mail)
+{
+ uoff_t size;
+
+ if (ctx->disabled)
+ return;
+
+ size = mail_get_physical_size(mail);
+ if (size != (uoff_t)-1)
+ ctx->bytes_diff += size;
+ ctx->count_diff++;
+}
+
+void quota_default_free(struct quota_root_transaction_context *ctx,
+ struct mail *mail)
+{
+ uoff_t size;
+
+ if (ctx->disabled)
+ return;
+
+ size = mail_get_physical_size(mail);
+ if (size != (uoff_t)-1)
+ ctx->bytes_diff -= size;
+ ctx->count_diff--;
+}
- Previous message: [dovecot-cvs] dovecot/src/plugins/quota Makefile.am, 1.4,
1.5 quota-dict.c, 1.8, 1.9 quota-dirsize.c, 1.6,
1.7 quota-maildir.c, NONE, 1.1 quota-private.h, 1.5,
1.6 quota.c, 1.6, 1.7
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index/maildir maildir-mail.c,
1.20, 1.21
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list