Fixes issues cased by recent change of cdb_len to unsigned. Reported by Krzysztof...
[mirror/scst/.git] / scst / include / scst_sgv.h
1 /*
2  *  include/scst_sgv.h
3  *
4  *  Copyright (C) 2004 - 2009 Vladislav Bolkhovitin <vst@vlnb.net>
5  *  Copyright (C) 2007 - 2009 ID7 Ltd.
6  *
7  *  Include file for SCST SGV cache.
8  *
9  *  This program is free software; you can redistribute it and/or
10  *  modify it under the terms of the GNU General Public License
11  *  as published by the Free Software Foundation, version 2
12  *  of the License.
13  *
14  *  This program is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  *  GNU General Public License for more details.
18  */
19 #ifndef __SCST_SGV_H
20 #define __SCST_SGV_H
21
22 /* SGV pool routines and flag bits */
23
24 /* Set if the allocated object must be not from the cache */
25 #define SCST_POOL_ALLOC_NO_CACHED               1
26
27 /* Set if there should not be any memory allocations on a cache miss */
28 #define SCST_POOL_NO_ALLOC_ON_CACHE_MISS        2
29
30 /* Set an object should be returned even if it doesn't have SG vector built */
31 #define SCST_POOL_RETURN_OBJ_ON_ALLOC_FAIL      4
32
33 struct sgv_pool_obj;
34 struct sgv_pool;
35
36 struct scst_mem_lim {
37         /* How much memory allocated under this object */
38         atomic_t alloced_pages;
39
40         /*
41          * How much memory allowed to allocated under this object. Put here
42          * mostly to save a possible cache miss accessing scst_max_dev_cmd_mem.
43          */
44         int max_allowed_pages;
45 };
46
47 /* Types of clustering */
48 enum sgv_clustering_types {
49         sgv_no_clustering = 0,
50         sgv_tail_clustering,
51         sgv_full_clustering,
52 };
53
54 struct sgv_pool *sgv_pool_create(const char *name,
55         enum sgv_clustering_types clustered, bool shared);
56 void sgv_pool_del(struct sgv_pool *pool);
57 void sgv_pool_flush(struct sgv_pool *pool);
58
59 void sgv_pool_set_allocator(struct sgv_pool *pool,
60         struct page *(*alloc_pages_fn)(struct scatterlist *, gfp_t, void *),
61         void (*free_pages_fn)(struct scatterlist *, int, void *));
62
63 struct scatterlist *sgv_pool_alloc(struct sgv_pool *pool, unsigned int size,
64         gfp_t gfp_mask, int flags, int *count,
65         struct sgv_pool_obj **sgv, struct scst_mem_lim *mem_lim, void *priv);
66 void sgv_pool_free(struct sgv_pool_obj *sgv, struct scst_mem_lim *mem_lim);
67
68 void *sgv_get_priv(struct sgv_pool_obj *sgv);
69
70 void scst_init_mem_lim(struct scst_mem_lim *mem_lim);
71
72 #endif /* __SCST_SGV_H */