#ifndef _VX_VS_DLIMIT_H
#define _VX_VS_DLIMIT_H
+
+// #define VX_DEBUG
+
#include <linux/kernel.h>
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include "vserver/context.h"
#include "vserver/dlimit.h"
-#include "vserver/debug.h"
+
+#if defined(VX_DEBUG)
+#define vxdprintk(x...) printk("vxd: " x)
+#else
+#define vxdprintk(x...)
+#endif
#define get_dl_info(i) __get_dl_info(i,__FILE__,__LINE__)
{
if (!dli)
return NULL;
- vxlprintk(VXD_CBIT(dlim, 4), "get_dl_info(%p[#%d.%d])",
+ vxdprintk("get_dl_info(%p[#%d.%d])\t%s:%d\n",
dli, dli?dli->dl_xid:0, dli?atomic_read(&dli->dl_usecnt):0,
_file, _line);
atomic_inc(&dli->dl_usecnt);
#define put_dl_info(i) __put_dl_info(i,__FILE__,__LINE__)
-static inline void __put_dl_info(struct dl_info *dli,
- const char *_file, int _line)
+static inline void __put_dl_info(struct dl_info *dli, const char *_file, int _line)
{
if (!dli)
return;
- vxlprintk(VXD_CBIT(dlim, 4), "put_dl_info(%p[#%d.%d])",
+ vxdprintk("put_dl_info(%p[#%d.%d])\t%s:%d\n",
dli, dli?dli->dl_xid:0, dli?atomic_read(&dli->dl_usecnt):0,
_file, _line);
if (atomic_dec_and_test(&dli->dl_usecnt))
}
+extern int vx_debug_dlimit;
+
#define __dlimit_char(d) ((d)?'*':' ')
static inline int __dl_alloc_space(struct super_block *sb,
spin_unlock(&dli->dl_lock);
put_dl_info(dli);
out:
- vxlprintk(VXD_CBIT(dlim, 1),
- "ALLOC (%p,#%d)%c %lld bytes (%d)",
- sb, xid, __dlimit_char(dli), nr, ret, file, line);
+ if (vx_debug_dlimit)
+ printk("ALLOC (%p,#%d)%c %lld bytes (%d)@ %s:%d\n",
+ sb, xid, __dlimit_char(dli), nr, ret, file, line);
return ret;
}
static inline void __dl_free_space(struct super_block *sb,
- xid_t xid, dlsize_t nr, const char *_file, int _line)
+ xid_t xid, dlsize_t nr, const char *file, int line)
{
struct dl_info *dli = NULL;
goto out;
spin_lock(&dli->dl_lock);
- if (dli->dl_space_used > nr)
- dli->dl_space_used -= nr;
- else
- dli->dl_space_used = 0;
+ dli->dl_space_used -= nr;
spin_unlock(&dli->dl_lock);
put_dl_info(dli);
out:
- vxlprintk(VXD_CBIT(dlim, 1),
- "FREE (%p,#%d)%c %lld bytes",
- sb, xid, __dlimit_char(dli), nr, _file, _line);
+ if (vx_debug_dlimit)
+ printk("FREE (%p,#%d)%c %lld bytes @ %s:%d\n",
+ sb, xid, __dlimit_char(dli), nr, file, line);
}
static inline int __dl_alloc_inode(struct super_block *sb,
- xid_t xid, const char *_file, int _line)
+ xid_t xid, const char *file, int line)
{
struct dl_info *dli;
int ret = 0;
ret = (dli->dl_inodes_used >= dli->dl_inodes_total);
if (!ret)
dli->dl_inodes_used++;
-#if 0
- else
- printk("VSW: DLIMIT hit (%p,#%d), inode %d>=%d @ %s:%d\n",
- sb, xid,
- dli->dl_inodes_used, dli->dl_inodes_total,
- file, line);
-#endif
spin_unlock(&dli->dl_lock);
put_dl_info(dli);
out:
- vxlprintk(VXD_CBIT(dlim, 0),
- "ALLOC (%p,#%d)%c inode (%d)",
- sb, xid, __dlimit_char(dli), ret, _file, _line);
+ if (vx_debug_dlimit)
+ printk("ALLOC (%p,#%d)%c inode (%d)@ %s:%d\n",
+ sb, xid, __dlimit_char(dli), ret, file, line);
return ret;
}
static inline void __dl_free_inode(struct super_block *sb,
- xid_t xid, const char *_file, int _line)
+ xid_t xid, const char *file, int line)
{
struct dl_info *dli;
goto out;
spin_lock(&dli->dl_lock);
- if (dli->dl_inodes_used > 1)
- dli->dl_inodes_used--;
- else
- dli->dl_inodes_used = 0;
+ dli->dl_inodes_used--;
spin_unlock(&dli->dl_lock);
put_dl_info(dli);
out:
- vxlprintk(VXD_CBIT(dlim, 0),
- "FREE (%p,#%d)%c inode",
- sb, xid, __dlimit_char(dli), _file, _line);
+ if (vx_debug_dlimit)
+ printk("FREE (%p,#%d)%c inode @ %s:%d\n",
+ sb, xid, __dlimit_char(dli), file, line);
}
-static inline void __dl_adjust_block(struct super_block *sb, xid_t xid,
- unsigned int *free_blocks, unsigned int *root_blocks,
- const char *_file, int _line)
-{
- struct dl_info *dli;
- uint64_t broot, bfree;
-
- dli = locate_dl_info(sb, xid);
- if (!dli)
- return;
-
- spin_lock(&dli->dl_lock);
- broot = (dli->dl_space_total -
- (dli->dl_space_total >> 10) * dli->dl_nrlmult)
- >> sb->s_blocksize_bits;
- bfree = (dli->dl_space_total - dli->dl_space_used)
- >> sb->s_blocksize_bits;
- spin_unlock(&dli->dl_lock);
-
- vxlprintk(VXD_CBIT(dlim, 2),
- "ADJUST: %lld,%lld on %d,%d [mult=%d]",
- bfree, broot, *free_blocks, *root_blocks,
- dli->dl_nrlmult, _file, _line);
- if (free_blocks) {
- if (*free_blocks > bfree)
- *free_blocks = bfree;
- }
- if (root_blocks) {
- if (*root_blocks > broot)
- *root_blocks = broot;
- }
- put_dl_info(dli);
-}
#define DLIMIT_ALLOC_BLOCK(sb, xid, nr) \
__dl_free_inode(sb, xid, __FILE__, __LINE__ )
-#define DLIMIT_ADJUST_BLOCK(sb, xid, fb, rb) \
- __dl_adjust_block(sb, xid, fb, rb, __FILE__, __LINE__ )
+#define DLIMIT_ADJUST_BLOCK(sb, xid, fb, rb)
#else