kernel - tmpfs: Set M_NULLOK on node allocations and safe node_init against
authorVenkatesh Srinivas <me@endeavour.zapto.org>
Fri, 10 Sep 2010 13:03:59 +0000 (06:03 -0700)
committerVenkatesh Srinivas <me@endeavour.zapto.org>
Fri, 10 Sep 2010 13:03:59 +0000 (06:03 -0700)
null node pointers.

Dragonfly-bug: Still 1726 (tmpfs malloc limit exceeded).

sys/vfs/tmpfs/tmpfs_subr.c
sys/vfs/tmpfs/tmpfs_vfsops.c

index a77069e..55ae462 100644 (file)
@@ -105,7 +105,9 @@ tmpfs_alloc_node(struct tmpfs_mount *tmp, enum vtype type,
        if (tmp->tm_nodes_inuse >= tmp->tm_nodes_max)
                return (ENOSPC);
 
-       nnode = (struct tmpfs_node *)objcache_get(tmp->tm_node_pool, M_WAITOK);
+       nnode = objcache_get(tmp->tm_node_pool, M_WAITOK | M_NULLOK);
+       if (nnode == NULL)
+               return (ENOSPC);
 
        /* Generic initialization. */
        nnode->tn_type = type;
index 9edc68e..5ef89cb 100644 (file)
@@ -106,6 +106,8 @@ static void*
 tmpfs_node_init(void *args, int flags)
 {
        struct tmpfs_node *node = (struct tmpfs_node *)objcache_malloc_alloc(args, flags);
+       if (node == NULL)
+               return (NULL);
        node->tn_id = 0;
 
        lockinit(&node->tn_interlock, "tmpfs node interlock", 0, LK_CANRECURSE);