xfs
[Top] [All Lists]

[PATCH 03/11] xfs: allow log ticket allocation to take allocation flags

To: xfs@xxxxxxxxxxx
Subject: [PATCH 03/11] xfs: allow log ticket allocation to take allocation flags
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Thu, 6 May 2010 11:45:43 +1000
In-reply-to: <1273110351-2333-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1273110351-2333-1-git-send-email-david@xxxxxxxxxxxxx>
From: Dave Chinner <dchinner@xxxxxxxxxx>

Delayed logging currently requires ticket allocation to succeed, so
we need to be able to sleep on allocation. It also should not allow
memory allocation to recurse into the filesystem. hence we need to
pass allocation flags directing the type of allocation the caller
requires.

Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
---
 fs/xfs/xfs_log.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index 687b220..83be6a6 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -88,11 +88,9 @@ STATIC void xlog_ungrant_log_space(xlog_t     *log,
 
 
 /* local ticket functions */
-STATIC xlog_ticket_t   *xlog_ticket_alloc(xlog_t *log,
-                                        int    unit_bytes,
-                                        int    count,
-                                        char   clientid,
-                                        uint   flags);
+STATIC xlog_ticket_t *xlog_ticket_alloc(xlog_t *log, int unit_bytes, int count,
+                                       char clientid, uint flags,
+                                       int alloc_flags);
 
 #if defined(DEBUG)
 STATIC void    xlog_verify_dest_ptr(xlog_t *log, char *ptr);
@@ -376,7 +374,8 @@ xfs_log_reserve(
        } else {
                /* may sleep if need to allocate more tickets */
                internal_ticket = xlog_ticket_alloc(log, unit_bytes, cnt,
-                                                 client, flags);
+                                                 client, flags,
+                                                 KM_SLEEP|KM_MAYFAIL);
                if (!internal_ticket)
                        return XFS_ERROR(ENOMEM);
                internal_ticket->t_trans_type = t_type;
@@ -3331,13 +3330,14 @@ xlog_ticket_alloc(
        int             unit_bytes,
        int             cnt,
        char            client,
-       uint            xflags)
+       uint            xflags,
+       int             alloc_flags)
 {
        struct xlog_ticket *tic;
        uint            num_headers;
        int             iclog_space;
 
-       tic = kmem_zone_zalloc(xfs_log_ticket_zone, KM_SLEEP|KM_MAYFAIL);
+       tic = kmem_zone_zalloc(xfs_log_ticket_zone, alloc_flags);
        if (!tic)
                return NULL;
 
-- 
1.5.6.5

<Prev in Thread] Current Thread [Next in Thread>