|
@@ -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;
|
|
|
|