X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fvserver%2Fdlimit.c;h=96ad9a59263345f9db1e2d6e8d026f5ec8387f1a;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=9cf8d6d985efc03b2b4b53568eff237553272e76;hpb=cee37fe97739d85991964371c1f3a745c00dd236;p=linux-2.6.git diff --git a/kernel/vserver/dlimit.c b/kernel/vserver/dlimit.c index 9cf8d6d98..96ad9a592 100644 --- a/kernel/vserver/dlimit.c +++ b/kernel/vserver/dlimit.c @@ -10,7 +10,6 @@ * */ -#include #include #include #include @@ -132,10 +131,12 @@ static inline struct dl_info *__lookup_dl_info(struct super_block *sb, xid_t xid { struct hlist_head *head = &dl_info_hash[__hashval(sb, xid)]; struct hlist_node *pos; + struct dl_info *dli; - hlist_for_each_rcu(pos, head) { - struct dl_info *dli = - hlist_entry(pos, struct dl_info, dl_hlist); + hlist_for_each_entry_rcu(dli, pos, head, dl_hlist) { +// hlist_for_each_rcu(pos, head) { +// struct dl_info *dli = +// hlist_entry(pos, struct dl_info, dl_hlist); if (dli->dl_xid == xid && dli->dl_sb == sb) { return dli; @@ -181,7 +182,7 @@ void rcu_free_dl_info(struct rcu_head *head) -int do_addrem_dlimit(uint32_t id, const char __user *name, +static int do_addrem_dlimit(uint32_t id, const char __user *name, uint32_t flags, int add) { struct nameidata nd; @@ -494,6 +495,12 @@ void vx_vsi_statfs(struct super_block *sb, struct kstatfs *buf) if (buf->f_files > dli->dl_inodes_total) buf->f_files = dli->dl_inodes_total; + /* inode hack for reiserfs */ + if ((buf->f_files == 0) && (dli->dl_inodes_total > 0)) { + buf->f_files = dli->dl_inodes_total; + buf->f_ffree = dli->dl_inodes_total; + } + ifree = dli->dl_inodes_total - dli->dl_inodes_used; /* reduce free inodes to min */ if (ifree < buf->f_ffree)