The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/fs/dquot.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Implementation of the diskquota system for the LINUX operating system. QUOTA
    3  * is implemented using the BSD system call interface as the means of
    4  * communication with the user level. This file contains the generic routines
    5  * called by the different filesystems on allocation of an inode or block.
    6  * These routines take care of the administration needed to have a consistent
    7  * diskquota tracking system. The ideas of both user and group quotas are based
    8  * on the Melbourne quota system as used on BSD derived systems. The internal
    9  * implementation is based on one of the several variants of the LINUX
   10  * inode-subsystem with added complexity of the diskquota system.
   11  * 
   12  * Author:      Marco van Wieringen <mvw@planets.elm.net>
   13  *
   14  * Fixes:   Dmitry Gorodchanin <pgmdsg@ibi.com>, 11 Feb 96
   15  *
   16  *              Revised list management to avoid races
   17  *              -- Bill Hawes, <whawes@star.net>, 9/98
   18  *
   19  *              Fixed races in dquot_transfer(), dqget() and dquot_alloc_...().
   20  *              As the consequence the locking was moved from dquot_decr_...(),
   21  *              dquot_incr_...() to calling functions.
   22  *              invalidate_dquots() now writes modified dquots.
   23  *              Serialized quota_off() and quota_on() for mount point.
   24  *              Fixed a few bugs in grow_dquots().
   25  *              Fixed deadlock in write_dquot() - we no longer account quotas on
   26  *              quota files
   27  *              remove_dquot_ref() moved to inode.c - it now traverses through inodes
   28  *              add_dquot_ref() restarts after blocking
   29  *              Added check for bogus uid and fixed check for group in quotactl.
   30  *              Jan Kara, <jack@suse.cz>, sponsored by SuSE CR, 10-11/99
   31  *
   32  *              Used struct list_head instead of own list struct
   33  *              Invalidation of referenced dquots is no longer possible
   34  *              Improved free_dquots list management
   35  *              Quota and i_blocks are now updated in one place to avoid races
   36  *              Warnings are now delayed so we won't block in critical section
   37  *              Write updated not to require dquot lock
   38  *              Jan Kara, <jack@suse.cz>, 9/2000
   39  *
   40  *              Added dynamic quota structure allocation
   41  *              Jan Kara <jack@suse.cz> 12/2000
   42  *
   43  *              Rewritten quota interface. Implemented new quota format and
   44  *              formats registering.
   45  *              Jan Kara, <jack@suse.cz>, 2001,2002
   46  *
   47  *              New SMP locking.
   48  *              Jan Kara, <jack@suse.cz>, 10/2002
   49  *
   50  *              Added journalled quota support, fix lock inversion problems
   51  *              Jan Kara, <jack@suse.cz>, 2003,2004
   52  *
   53  * (C) Copyright 1994 - 1997 Marco van Wieringen 
   54  */
   55 
   56 #include <linux/errno.h>
   57 #include <linux/kernel.h>
   58 #include <linux/fs.h>
   59 #include <linux/mount.h>
   60 #include <linux/mm.h>
   61 #include <linux/time.h>
   62 #include <linux/types.h>
   63 #include <linux/string.h>
   64 #include <linux/fcntl.h>
   65 #include <linux/stat.h>
   66 #include <linux/tty.h>
   67 #include <linux/file.h>
   68 #include <linux/slab.h>
   69 #include <linux/sysctl.h>
   70 #include <linux/init.h>
   71 #include <linux/module.h>
   72 #include <linux/proc_fs.h>
   73 #include <linux/security.h>
   74 #include <linux/kmod.h>
   75 #include <linux/namei.h>
   76 #include <linux/buffer_head.h>
   77 #include <linux/capability.h>
   78 #include <linux/quotaops.h>
   79 #include <linux/writeback.h> /* for inode_lock, oddly enough.. */
   80 #ifdef CONFIG_QUOTA_NETLINK_INTERFACE
   81 #include <net/netlink.h>
   82 #include <net/genetlink.h>
   83 #endif
   84 
   85 #include <asm/uaccess.h>
   86 
   87 #define __DQUOT_PARANOIA
   88 
   89 /*
   90  * There are two quota SMP locks. dq_list_lock protects all lists with quotas
   91  * and quota formats and also dqstats structure containing statistics about the
   92  * lists. dq_data_lock protects data from dq_dqb and also mem_dqinfo structures
   93  * and also guards consistency of dquot->dq_dqb with inode->i_blocks, i_bytes.
   94  * i_blocks and i_bytes updates itself are guarded by i_lock acquired directly
   95  * in inode_add_bytes() and inode_sub_bytes().
   96  *
   97  * The spinlock ordering is hence: dq_data_lock > dq_list_lock > i_lock
   98  *
   99  * Note that some things (eg. sb pointer, type, id) doesn't change during
  100  * the life of the dquot structure and so needn't to be protected by a lock
  101  *
  102  * Any operation working on dquots via inode pointers must hold dqptr_sem.  If
  103  * operation is just reading pointers from inode (or not using them at all) the
  104  * read lock is enough. If pointers are altered function must hold write lock
  105  * (these locking rules also apply for S_NOQUOTA flag in the inode - note that
  106  * for altering the flag i_mutex is also needed).  If operation is holding
  107  * reference to dquot in other way (e.g. quotactl ops) it must be guarded by
  108  * dqonoff_mutex.
  109  * This locking assures that:
  110  *   a) update/access to dquot pointers in inode is serialized
  111  *   b) everyone is guarded against invalidate_dquots()
  112  *
  113  * Each dquot has its dq_lock mutex. Locked dquots might not be referenced
  114  * from inodes (dquot_alloc_space() and such don't check the dq_lock).
  115  * Currently dquot is locked only when it is being read to memory (or space for
  116  * it is being allocated) on the first dqget() and when it is being released on
  117  * the last dqput(). The allocation and release oparations are serialized by
  118  * the dq_lock and by checking the use count in dquot_release().  Write
  119  * operations on dquots don't hold dq_lock as they copy data under dq_data_lock
  120  * spinlock to internal buffers before writing.
  121  *
  122  * Lock ordering (including related VFS locks) is the following:
  123  *   i_mutex > dqonoff_sem > journal_lock > dqptr_sem > dquot->dq_lock >
  124  *   dqio_mutex
  125  * i_mutex on quota files is special (it's below dqio_mutex)
  126  */
  127 
  128 static DEFINE_SPINLOCK(dq_list_lock);
  129 DEFINE_SPINLOCK(dq_data_lock);
  130 
  131 static char *quotatypes[] = INITQFNAMES;
  132 static struct quota_format_type *quota_formats; /* List of registered formats */
  133 static struct quota_module_name module_names[] = INIT_QUOTA_MODULE_NAMES;
  134 
  135 /* SLAB cache for dquot structures */
  136 static struct kmem_cache *dquot_cachep;
  137 
  138 int register_quota_format(struct quota_format_type *fmt)
  139 {
  140         spin_lock(&dq_list_lock);
  141         fmt->qf_next = quota_formats;
  142         quota_formats = fmt;
  143         spin_unlock(&dq_list_lock);
  144         return 0;
  145 }
  146 
  147 void unregister_quota_format(struct quota_format_type *fmt)
  148 {
  149         struct quota_format_type **actqf;
  150 
  151         spin_lock(&dq_list_lock);
  152         for (actqf = &quota_formats; *actqf && *actqf != fmt; actqf = &(*actqf)->qf_next);
  153         if (*actqf)
  154                 *actqf = (*actqf)->qf_next;
  155         spin_unlock(&dq_list_lock);
  156 }
  157 
  158 static struct quota_format_type *find_quota_format(int id)
  159 {
  160         struct quota_format_type *actqf;
  161 
  162         spin_lock(&dq_list_lock);
  163         for (actqf = quota_formats; actqf && actqf->qf_fmt_id != id; actqf = actqf->qf_next);
  164         if (!actqf || !try_module_get(actqf->qf_owner)) {
  165                 int qm;
  166 
  167                 spin_unlock(&dq_list_lock);
  168                 
  169                 for (qm = 0; module_names[qm].qm_fmt_id && module_names[qm].qm_fmt_id != id; qm++);
  170                 if (!module_names[qm].qm_fmt_id || request_module(module_names[qm].qm_mod_name))
  171                         return NULL;
  172 
  173                 spin_lock(&dq_list_lock);
  174                 for (actqf = quota_formats; actqf && actqf->qf_fmt_id != id; actqf = actqf->qf_next);
  175                 if (actqf && !try_module_get(actqf->qf_owner))
  176                         actqf = NULL;
  177         }
  178         spin_unlock(&dq_list_lock);
  179         return actqf;
  180 }
  181 
  182 static void put_quota_format(struct quota_format_type *fmt)
  183 {
  184         module_put(fmt->qf_owner);
  185 }
  186 
  187 /*
  188  * Dquot List Management:
  189  * The quota code uses three lists for dquot management: the inuse_list,
  190  * free_dquots, and dquot_hash[] array. A single dquot structure may be
  191  * on all three lists, depending on its current state.
  192  *
  193  * All dquots are placed to the end of inuse_list when first created, and this
  194  * list is used for invalidate operation, which must look at every dquot.
  195  *
  196  * Unused dquots (dq_count == 0) are added to the free_dquots list when freed,
  197  * and this list is searched whenever we need an available dquot.  Dquots are
  198  * removed from the list as soon as they are used again, and
  199  * dqstats.free_dquots gives the number of dquots on the list. When
  200  * dquot is invalidated it's completely released from memory.
  201  *
  202  * Dquots with a specific identity (device, type and id) are placed on
  203  * one of the dquot_hash[] hash chains. The provides an efficient search
  204  * mechanism to locate a specific dquot.
  205  */
  206 
  207 static LIST_HEAD(inuse_list);
  208 static LIST_HEAD(free_dquots);
  209 static unsigned int dq_hash_bits, dq_hash_mask;
  210 static struct hlist_head *dquot_hash;
  211 
  212 struct dqstats dqstats;
  213 
  214 static void dqput(struct dquot *dquot);
  215 
  216 static inline unsigned int
  217 hashfn(const struct super_block *sb, unsigned int id, int type)
  218 {
  219         unsigned long tmp;
  220 
  221         tmp = (((unsigned long)sb>>L1_CACHE_SHIFT) ^ id) * (MAXQUOTAS - type);
  222         return (tmp + (tmp >> dq_hash_bits)) & dq_hash_mask;
  223 }
  224 
  225 /*
  226  * Following list functions expect dq_list_lock to be held
  227  */
  228 static inline void insert_dquot_hash(struct dquot *dquot)
  229 {
  230         struct hlist_head *head = dquot_hash + hashfn(dquot->dq_sb, dquot->dq_id, dquot->dq_type);
  231         hlist_add_head(&dquot->dq_hash, head);
  232 }
  233 
  234 static inline void remove_dquot_hash(struct dquot *dquot)
  235 {
  236         hlist_del_init(&dquot->dq_hash);
  237 }
  238 
  239 static inline struct dquot *find_dquot(unsigned int hashent, struct super_block *sb, unsigned int id, int type)
  240 {
  241         struct hlist_node *node;
  242         struct dquot *dquot;
  243 
  244         hlist_for_each (node, dquot_hash+hashent) {
  245                 dquot = hlist_entry(node, struct dquot, dq_hash);
  246                 if (dquot->dq_sb == sb && dquot->dq_id == id && dquot->dq_type == type)
  247                         return dquot;
  248         }
  249         return NODQUOT;
  250 }
  251 
  252 /* Add a dquot to the tail of the free list */
  253 static inline void put_dquot_last(struct dquot *dquot)
  254 {
  255         list_add_tail(&dquot->dq_free, &free_dquots);
  256         dqstats.free_dquots++;
  257 }
  258 
  259 static inline void remove_free_dquot(struct dquot *dquot)
  260 {
  261         if (list_empty(&dquot->dq_free))
  262                 return;
  263         list_del_init(&dquot->dq_free);
  264         dqstats.free_dquots--;
  265 }
  266 
  267 static inline void put_inuse(struct dquot *dquot)
  268 {
  269         /* We add to the back of inuse list so we don't have to restart
  270          * when traversing this list and we block */
  271         list_add_tail(&dquot->dq_inuse, &inuse_list);
  272         dqstats.allocated_dquots++;
  273 }
  274 
  275 static inline void remove_inuse(struct dquot *dquot)
  276 {
  277         dqstats.allocated_dquots--;
  278         list_del(&dquot->dq_inuse);
  279 }
  280 /*
  281  * End of list functions needing dq_list_lock
  282  */
  283 
  284 static void wait_on_dquot(struct dquot *dquot)
  285 {
  286         mutex_lock(&dquot->dq_lock);
  287         mutex_unlock(&dquot->dq_lock);
  288 }
  289 
  290 static inline int dquot_dirty(struct dquot *dquot)
  291 {
  292         return test_bit(DQ_MOD_B, &dquot->dq_flags);
  293 }
  294 
  295 static inline int mark_dquot_dirty(struct dquot *dquot)
  296 {
  297         return dquot->dq_sb->dq_op->mark_dirty(dquot);
  298 }
  299 
  300 int dquot_mark_dquot_dirty(struct dquot *dquot)
  301 {
  302         spin_lock(&dq_list_lock);
  303         if (!test_and_set_bit(DQ_MOD_B, &dquot->dq_flags))
  304                 list_add(&dquot->dq_dirty, &sb_dqopt(dquot->dq_sb)->
  305                                 info[dquot->dq_type].dqi_dirty_list);
  306         spin_unlock(&dq_list_lock);
  307         return 0;
  308 }
  309 
  310 /* This function needs dq_list_lock */
  311 static inline int clear_dquot_dirty(struct dquot *dquot)
  312 {
  313         if (!test_and_clear_bit(DQ_MOD_B, &dquot->dq_flags))
  314                 return 0;
  315         list_del_init(&dquot->dq_dirty);
  316         return 1;
  317 }
  318 
  319 void mark_info_dirty(struct super_block *sb, int type)
  320 {
  321         set_bit(DQF_INFO_DIRTY_B, &sb_dqopt(sb)->info[type].dqi_flags);
  322 }
  323 EXPORT_SYMBOL(mark_info_dirty);
  324 
  325 /*
  326  *      Read dquot from disk and alloc space for it
  327  */
  328 
  329 int dquot_acquire(struct dquot *dquot)
  330 {
  331         int ret = 0, ret2 = 0;
  332         struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
  333 
  334         mutex_lock(&dquot->dq_lock);
  335         mutex_lock(&dqopt->dqio_mutex);
  336         if (!test_bit(DQ_READ_B, &dquot->dq_flags))
  337                 ret = dqopt->ops[dquot->dq_type]->read_dqblk(dquot);
  338         if (ret < 0)
  339                 goto out_iolock;
  340         set_bit(DQ_READ_B, &dquot->dq_flags);
  341         /* Instantiate dquot if needed */
  342         if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && !dquot->dq_off) {
  343                 ret = dqopt->ops[dquot->dq_type]->commit_dqblk(dquot);
  344                 /* Write the info if needed */
  345                 if (info_dirty(&dqopt->info[dquot->dq_type]))
  346                         ret2 = dqopt->ops[dquot->dq_type]->write_file_info(dquot->dq_sb, dquot->dq_type);
  347                 if (ret < 0)
  348                         goto out_iolock;
  349                 if (ret2 < 0) {
  350                         ret = ret2;
  351                         goto out_iolock;
  352                 }
  353         }
  354         set_bit(DQ_ACTIVE_B, &dquot->dq_flags);
  355 out_iolock:
  356         mutex_unlock(&dqopt->dqio_mutex);
  357         mutex_unlock(&dquot->dq_lock);
  358         return ret;
  359 }
  360 
  361 /*
  362  *      Write dquot to disk
  363  */
  364 int dquot_commit(struct dquot *dquot)
  365 {
  366         int ret = 0, ret2 = 0;
  367         struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
  368 
  369         mutex_lock(&dqopt->dqio_mutex);
  370         spin_lock(&dq_list_lock);
  371         if (!clear_dquot_dirty(dquot)) {
  372                 spin_unlock(&dq_list_lock);
  373                 goto out_sem;
  374         }
  375         spin_unlock(&dq_list_lock);
  376         /* Inactive dquot can be only if there was error during read/init
  377          * => we have better not writing it */
  378         if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
  379                 ret = dqopt->ops[dquot->dq_type]->commit_dqblk(dquot);
  380                 if (info_dirty(&dqopt->info[dquot->dq_type]))
  381                         ret2 = dqopt->ops[dquot->dq_type]->write_file_info(dquot->dq_sb, dquot->dq_type);
  382                 if (ret >= 0)
  383                         ret = ret2;
  384         }
  385 out_sem:
  386         mutex_unlock(&dqopt->dqio_mutex);
  387         return ret;
  388 }
  389 
  390 /*
  391  *      Release dquot
  392  */
  393 int dquot_release(struct dquot *dquot)
  394 {
  395         int ret = 0, ret2 = 0;
  396         struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
  397 
  398         mutex_lock(&dquot->dq_lock);
  399         /* Check whether we are not racing with some other dqget() */
  400         if (atomic_read(&dquot->dq_count) > 1)
  401                 goto out_dqlock;
  402         mutex_lock(&dqopt->dqio_mutex);
  403         if (dqopt->ops[dquot->dq_type]->release_dqblk) {
  404                 ret = dqopt->ops[dquot->dq_type]->release_dqblk(dquot);
  405                 /* Write the info */
  406                 if (info_dirty(&dqopt->info[dquot->dq_type]))
  407                         ret2 = dqopt->ops[dquot->dq_type]->write_file_info(dquot->dq_sb, dquot->dq_type);
  408                 if (ret >= 0)
  409                         ret = ret2;
  410         }
  411         clear_bit(DQ_ACTIVE_B, &dquot->dq_flags);
  412         mutex_unlock(&dqopt->dqio_mutex);
  413 out_dqlock:
  414         mutex_unlock(&dquot->dq_lock);
  415         return ret;
  416 }
  417 
  418 /* Invalidate all dquots on the list. Note that this function is called after
  419  * quota is disabled and pointers from inodes removed so there cannot be new
  420  * quota users. There can still be some users of quotas due to inodes being
  421  * just deleted or pruned by prune_icache() (those are not attached to any
  422  * list). We have to wait for such users.
  423  */
  424 static void invalidate_dquots(struct super_block *sb, int type)
  425 {
  426         struct dquot *dquot, *tmp;
  427 
  428 restart:
  429         spin_lock(&dq_list_lock);
  430         list_for_each_entry_safe(dquot, tmp, &inuse_list, dq_inuse) {
  431                 if (dquot->dq_sb != sb)
  432                         continue;
  433                 if (dquot->dq_type != type)
  434                         continue;
  435                 /* Wait for dquot users */
  436                 if (atomic_read(&dquot->dq_count)) {
  437                         DEFINE_WAIT(wait);
  438 
  439                         atomic_inc(&dquot->dq_count);
  440                         prepare_to_wait(&dquot->dq_wait_unused, &wait,
  441                                         TASK_UNINTERRUPTIBLE);
  442                         spin_unlock(&dq_list_lock);
  443                         /* Once dqput() wakes us up, we know it's time to free
  444                          * the dquot.
  445                          * IMPORTANT: we rely on the fact that there is always
  446                          * at most one process waiting for dquot to free.
  447                          * Otherwise dq_count would be > 1 and we would never
  448                          * wake up.
  449                          */
  450                         if (atomic_read(&dquot->dq_count) > 1)
  451                                 schedule();
  452                         finish_wait(&dquot->dq_wait_unused, &wait);
  453                         dqput(dquot);
  454                         /* At this moment dquot() need not exist (it could be
  455                          * reclaimed by prune_dqcache(). Hence we must
  456                          * restart. */
  457                         goto restart;
  458                 }
  459                 /*
  460                  * Quota now has no users and it has been written on last
  461                  * dqput()
  462                  */
  463                 remove_dquot_hash(dquot);
  464                 remove_free_dquot(dquot);
  465                 remove_inuse(dquot);
  466                 kmem_cache_free(dquot_cachep, dquot);
  467         }
  468         spin_unlock(&dq_list_lock);
  469 }
  470 
  471 int vfs_quota_sync(struct super_block *sb, int type)
  472 {
  473         struct list_head *dirty;
  474         struct dquot *dquot;
  475         struct quota_info *dqopt = sb_dqopt(sb);
  476         int cnt;
  477 
  478         mutex_lock(&dqopt->dqonoff_mutex);
  479         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
  480                 if (type != -1 && cnt != type)
  481                         continue;
  482                 if (!sb_has_quota_enabled(sb, cnt))
  483                         continue;
  484                 spin_lock(&dq_list_lock);
  485                 dirty = &dqopt->info[cnt].dqi_dirty_list;
  486                 while (!list_empty(dirty)) {
  487                         dquot = list_first_entry(dirty, struct dquot, dq_dirty);
  488                         /* Dirty and inactive can be only bad dquot... */
  489                         if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
  490                                 clear_dquot_dirty(dquot);
  491                                 continue;
  492                         }
  493                         /* Now we have active dquot from which someone is
  494                          * holding reference so we can safely just increase
  495                          * use count */
  496                         atomic_inc(&dquot->dq_count);
  497                         dqstats.lookups++;
  498                         spin_unlock(&dq_list_lock);
  499                         sb->dq_op->write_dquot(dquot);
  500                         dqput(dquot);
  501                         spin_lock(&dq_list_lock);
  502                 }
  503                 spin_unlock(&dq_list_lock);
  504         }
  505 
  506         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
  507                 if ((cnt == type || type == -1) && sb_has_quota_enabled(sb, cnt)
  508                         && info_dirty(&dqopt->info[cnt]))
  509                         sb->dq_op->write_info(sb, cnt);
  510         spin_lock(&dq_list_lock);
  511         dqstats.syncs++;
  512         spin_unlock(&dq_list_lock);
  513         mutex_unlock(&dqopt->dqonoff_mutex);
  514 
  515         return 0;
  516 }
  517 
  518 /* Free unused dquots from cache */
  519 static void prune_dqcache(int count)
  520 {
  521         struct list_head *head;
  522         struct dquot *dquot;
  523 
  524         head = free_dquots.prev;
  525         while (head != &free_dquots && count) {
  526                 dquot = list_entry(head, struct dquot, dq_free);
  527                 remove_dquot_hash(dquot);
  528                 remove_free_dquot(dquot);
  529                 remove_inuse(dquot);
  530                 kmem_cache_free(dquot_cachep, dquot);
  531                 count--;
  532                 head = free_dquots.prev;
  533         }
  534 }
  535 
  536 /*
  537  * This is called from kswapd when we think we need some
  538  * more memory
  539  */
  540 
  541 static int shrink_dqcache_memory(int nr, gfp_t gfp_mask)
  542 {
  543         if (nr) {
  544                 spin_lock(&dq_list_lock);
  545                 prune_dqcache(nr);
  546                 spin_unlock(&dq_list_lock);
  547         }
  548         return (dqstats.free_dquots / 100) * sysctl_vfs_cache_pressure;
  549 }
  550 
  551 static struct shrinker dqcache_shrinker = {
  552         .shrink = shrink_dqcache_memory,
  553         .seeks = DEFAULT_SEEKS,
  554 };
  555 
  556 /*
  557  * Put reference to dquot
  558  * NOTE: If you change this function please check whether dqput_blocks() works right...
  559  * MUST be called with either dqptr_sem or dqonoff_mutex held
  560  */
  561 static void dqput(struct dquot *dquot)
  562 {
  563         int ret;
  564 
  565         if (!dquot)
  566                 return;
  567 #ifdef __DQUOT_PARANOIA
  568         if (!atomic_read(&dquot->dq_count)) {
  569                 printk("VFS: dqput: trying to free free dquot\n");
  570                 printk("VFS: device %s, dquot of %s %d\n",
  571                         dquot->dq_sb->s_id,
  572                         quotatypes[dquot->dq_type],
  573                         dquot->dq_id);
  574                 BUG();
  575         }
  576 #endif
  577         
  578         spin_lock(&dq_list_lock);
  579         dqstats.drops++;
  580         spin_unlock(&dq_list_lock);
  581 we_slept:
  582         spin_lock(&dq_list_lock);
  583         if (atomic_read(&dquot->dq_count) > 1) {
  584                 /* We have more than one user... nothing to do */
  585                 atomic_dec(&dquot->dq_count);
  586                 /* Releasing dquot during quotaoff phase? */
  587                 if (!sb_has_quota_enabled(dquot->dq_sb, dquot->dq_type) &&
  588                     atomic_read(&dquot->dq_count) == 1)
  589                         wake_up(&dquot->dq_wait_unused);
  590                 spin_unlock(&dq_list_lock);
  591                 return;
  592         }
  593         /* Need to release dquot? */
  594         if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_dirty(dquot)) {
  595                 spin_unlock(&dq_list_lock);
  596                 /* Commit dquot before releasing */
  597                 ret = dquot->dq_sb->dq_op->write_dquot(dquot);
  598                 if (ret < 0) {
  599                         printk(KERN_ERR "VFS: cannot write quota structure on "
  600                                 "device %s (error %d). Quota may get out of "
  601                                 "sync!\n", dquot->dq_sb->s_id, ret);
  602                         /*
  603                          * We clear dirty bit anyway, so that we avoid
  604                          * infinite loop here
  605                          */
  606                         spin_lock(&dq_list_lock);
  607                         clear_dquot_dirty(dquot);
  608                         spin_unlock(&dq_list_lock);
  609                 }
  610                 goto we_slept;
  611         }
  612         /* Clear flag in case dquot was inactive (something bad happened) */
  613         clear_dquot_dirty(dquot);
  614         if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
  615                 spin_unlock(&dq_list_lock);
  616                 dquot->dq_sb->dq_op->release_dquot(dquot);
  617                 goto we_slept;
  618         }
  619         atomic_dec(&dquot->dq_count);
  620 #ifdef __DQUOT_PARANOIA
  621         /* sanity check */
  622         BUG_ON(!list_empty(&dquot->dq_free));
  623 #endif
  624         put_dquot_last(dquot);
  625         spin_unlock(&dq_list_lock);
  626 }
  627 
  628 static struct dquot *get_empty_dquot(struct super_block *sb, int type)
  629 {
  630         struct dquot *dquot;
  631 
  632         dquot = kmem_cache_zalloc(dquot_cachep, GFP_NOFS);
  633         if(!dquot)
  634                 return NODQUOT;
  635 
  636         mutex_init(&dquot->dq_lock);
  637         INIT_LIST_HEAD(&dquot->dq_free);
  638         INIT_LIST_HEAD(&dquot->dq_inuse);
  639         INIT_HLIST_NODE(&dquot->dq_hash);
  640         INIT_LIST_HEAD(&dquot->dq_dirty);
  641         init_waitqueue_head(&dquot->dq_wait_unused);
  642         dquot->dq_sb = sb;
  643         dquot->dq_type = type;
  644         atomic_set(&dquot->dq_count, 1);
  645 
  646         return dquot;
  647 }
  648 
  649 /*
  650  * Get reference to dquot
  651  * MUST be called with either dqptr_sem or dqonoff_mutex held
  652  */
  653 static struct dquot *dqget(struct super_block *sb, unsigned int id, int type)
  654 {
  655         unsigned int hashent = hashfn(sb, id, type);
  656         struct dquot *dquot, *empty = NODQUOT;
  657 
  658         if (!sb_has_quota_enabled(sb, type))
  659                 return NODQUOT;
  660 we_slept:
  661         spin_lock(&dq_list_lock);
  662         if ((dquot = find_dquot(hashent, sb, id, type)) == NODQUOT) {
  663                 if (empty == NODQUOT) {
  664                         spin_unlock(&dq_list_lock);
  665                         if ((empty = get_empty_dquot(sb, type)) == NODQUOT)
  666                                 schedule();     /* Try to wait for a moment... */
  667                         goto we_slept;
  668                 }
  669                 dquot = empty;
  670                 dquot->dq_id = id;
  671                 /* all dquots go on the inuse_list */
  672                 put_inuse(dquot);
  673                 /* hash it first so it can be found */
  674                 insert_dquot_hash(dquot);
  675                 dqstats.lookups++;
  676                 spin_unlock(&dq_list_lock);
  677         } else {
  678                 if (!atomic_read(&dquot->dq_count))
  679                         remove_free_dquot(dquot);
  680                 atomic_inc(&dquot->dq_count);
  681                 dqstats.cache_hits++;
  682                 dqstats.lookups++;
  683                 spin_unlock(&dq_list_lock);
  684                 if (empty)
  685                         kmem_cache_free(dquot_cachep, empty);
  686         }
  687         /* Wait for dq_lock - after this we know that either dquot_release() is already
  688          * finished or it will be canceled due to dq_count > 1 test */
  689         wait_on_dquot(dquot);
  690         /* Read the dquot and instantiate it (everything done only if needed) */
  691         if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && sb->dq_op->acquire_dquot(dquot) < 0) {
  692                 dqput(dquot);
  693                 return NODQUOT;
  694         }
  695 #ifdef __DQUOT_PARANOIA
  696         BUG_ON(!dquot->dq_sb);  /* Has somebody invalidated entry under us? */
  697 #endif
  698 
  699         return dquot;
  700 }
  701 
  702 static int dqinit_needed(struct inode *inode, int type)
  703 {
  704         int cnt;
  705 
  706         if (IS_NOQUOTA(inode))
  707                 return 0;
  708         if (type != -1)
  709                 return inode->i_dquot[type] == NODQUOT;
  710         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
  711                 if (inode->i_dquot[cnt] == NODQUOT)
  712                         return 1;
  713         return 0;
  714 }
  715 
  716 /* This routine is guarded by dqonoff_mutex mutex */
  717 static void add_dquot_ref(struct super_block *sb, int type)
  718 {
  719         struct inode *inode, *old_inode = NULL;
  720 
  721         spin_lock(&inode_lock);
  722         list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
  723                 if (!atomic_read(&inode->i_writecount))
  724                         continue;
  725                 if (!dqinit_needed(inode, type))
  726                         continue;
  727                 if (inode->i_state & (I_FREEING|I_WILL_FREE))
  728                         continue;
  729 
  730                 __iget(inode);
  731                 spin_unlock(&inode_lock);
  732 
  733                 iput(old_inode);
  734                 sb->dq_op->initialize(inode, type);
  735                 /* We hold a reference to 'inode' so it couldn't have been
  736                  * removed from s_inodes list while we dropped the inode_lock.
  737                  * We cannot iput the inode now as we can be holding the last
  738                  * reference and we cannot iput it under inode_lock. So we
  739                  * keep the reference and iput it later. */
  740                 old_inode = inode;
  741                 spin_lock(&inode_lock);
  742         }
  743         spin_unlock(&inode_lock);
  744         iput(old_inode);
  745 }
  746 
  747 /* Return 0 if dqput() won't block (note that 1 doesn't necessarily mean blocking) */
  748 static inline int dqput_blocks(struct dquot *dquot)
  749 {
  750         if (atomic_read(&dquot->dq_count) <= 1)
  751                 return 1;
  752         return 0;
  753 }
  754 
  755 /* Remove references to dquots from inode - add dquot to list for freeing if needed */
  756 /* We can't race with anybody because we hold dqptr_sem for writing... */
  757 static int remove_inode_dquot_ref(struct inode *inode, int type,
  758                                   struct list_head *tofree_head)
  759 {
  760         struct dquot *dquot = inode->i_dquot[type];
  761 
  762         inode->i_dquot[type] = NODQUOT;
  763         if (dquot != NODQUOT) {
  764                 if (dqput_blocks(dquot)) {
  765 #ifdef __DQUOT_PARANOIA
  766                         if (atomic_read(&dquot->dq_count) != 1)
  767                                 printk(KERN_WARNING "VFS: Adding dquot with dq_count %d to dispose list.\n", atomic_read(&dquot->dq_count));
  768 #endif
  769                         spin_lock(&dq_list_lock);
  770                         list_add(&dquot->dq_free, tofree_head); /* As dquot must have currently users it can't be on the free list... */
  771                         spin_unlock(&dq_list_lock);
  772                         return 1;
  773                 }
  774                 else
  775                         dqput(dquot);   /* We have guaranteed we won't block */
  776         }
  777         return 0;
  778 }
  779 
  780 /* Free list of dquots - called from inode.c */
  781 /* dquots are removed from inodes, no new references can be got so we are the only ones holding reference */
  782 static void put_dquot_list(struct list_head *tofree_head)
  783 {
  784         struct list_head *act_head;
  785         struct dquot *dquot;
  786 
  787         act_head = tofree_head->next;
  788         /* So now we have dquots on the list... Just free them */
  789         while (act_head != tofree_head) {
  790                 dquot = list_entry(act_head, struct dquot, dq_free);
  791                 act_head = act_head->next;
  792                 list_del_init(&dquot->dq_free); /* Remove dquot from the list so we won't have problems... */
  793                 dqput(dquot);
  794         }
  795 }
  796 
  797 static void remove_dquot_ref(struct super_block *sb, int type,
  798                 struct list_head *tofree_head)
  799 {
  800         struct inode *inode;
  801 
  802         spin_lock(&inode_lock);
  803         list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
  804                 if (!IS_NOQUOTA(inode))
  805                         remove_inode_dquot_ref(inode, type, tofree_head);
  806         }
  807         spin_unlock(&inode_lock);
  808 }
  809 
  810 /* Gather all references from inodes and drop them */
  811 static void drop_dquot_ref(struct super_block *sb, int type)
  812 {
  813         LIST_HEAD(tofree_head);
  814 
  815         if (sb->dq_op) {
  816                 down_write(&sb_dqopt(sb)->dqptr_sem);
  817                 remove_dquot_ref(sb, type, &tofree_head);
  818                 up_write(&sb_dqopt(sb)->dqptr_sem);
  819                 put_dquot_list(&tofree_head);
  820         }
  821 }
  822 
  823 static inline void dquot_incr_inodes(struct dquot *dquot, unsigned long number)
  824 {
  825         dquot->dq_dqb.dqb_curinodes += number;
  826 }
  827 
  828 static inline void dquot_incr_space(struct dquot *dquot, qsize_t number)
  829 {
  830         dquot->dq_dqb.dqb_curspace += number;
  831 }
  832 
  833 static inline void dquot_decr_inodes(struct dquot *dquot, unsigned long number)
  834 {
  835         if (dquot->dq_dqb.dqb_curinodes > number)
  836                 dquot->dq_dqb.dqb_curinodes -= number;
  837         else
  838                 dquot->dq_dqb.dqb_curinodes = 0;
  839         if (dquot->dq_dqb.dqb_curinodes <= dquot->dq_dqb.dqb_isoftlimit)
  840                 dquot->dq_dqb.dqb_itime = (time_t) 0;
  841         clear_bit(DQ_INODES_B, &dquot->dq_flags);
  842 }
  843 
  844 static inline void dquot_decr_space(struct dquot *dquot, qsize_t number)
  845 {
  846         if (dquot->dq_dqb.dqb_curspace > number)
  847                 dquot->dq_dqb.dqb_curspace -= number;
  848         else
  849                 dquot->dq_dqb.dqb_curspace = 0;
  850         if (toqb(dquot->dq_dqb.dqb_curspace) <= dquot->dq_dqb.dqb_bsoftlimit)
  851                 dquot->dq_dqb.dqb_btime = (time_t) 0;
  852         clear_bit(DQ_BLKS_B, &dquot->dq_flags);
  853 }
  854 
  855 static int warning_issued(struct dquot *dquot, const int warntype)
  856 {
  857         int flag = (warntype == QUOTA_NL_BHARDWARN ||
  858                 warntype == QUOTA_NL_BSOFTLONGWARN) ? DQ_BLKS_B :
  859                 ((warntype == QUOTA_NL_IHARDWARN ||
  860                 warntype == QUOTA_NL_ISOFTLONGWARN) ? DQ_INODES_B : 0);
  861 
  862         if (!flag)
  863                 return 0;
  864         return test_and_set_bit(flag, &dquot->dq_flags);
  865 }
  866 
  867 #ifdef CONFIG_PRINT_QUOTA_WARNING
  868 static int flag_print_warnings = 1;
  869 
  870 static inline int need_print_warning(struct dquot *dquot)
  871 {
  872         if (!flag_print_warnings)
  873                 return 0;
  874 
  875         switch (dquot->dq_type) {
  876                 case USRQUOTA:
  877                         return current->fsuid == dquot->dq_id;
  878                 case GRPQUOTA:
  879                         return in_group_p(dquot->dq_id);
  880         }
  881         return 0;
  882 }
  883 
  884 /* Print warning to user which exceeded quota */
  885 static void print_warning(struct dquot *dquot, const int warntype)
  886 {
  887         char *msg = NULL;
  888         struct tty_struct *tty;
  889 
  890         if (warntype == QUOTA_NL_IHARDBELOW ||
  891             warntype == QUOTA_NL_ISOFTBELOW ||
  892             warntype == QUOTA_NL_BHARDBELOW ||
  893             warntype == QUOTA_NL_BSOFTBELOW || !need_print_warning(dquot))
  894                 return;
  895 
  896         tty = get_current_tty();
  897         if (!tty)
  898                 return;
  899         tty_write_message(tty, dquot->dq_sb->s_id);
  900         if (warntype == QUOTA_NL_ISOFTWARN || warntype == QUOTA_NL_BSOFTWARN)
  901                 tty_write_message(tty, ": warning, ");
  902         else
  903                 tty_write_message(tty, ": write failed, ");
  904         tty_write_message(tty, quotatypes[dquot->dq_type]);
  905         switch (warntype) {
  906                 case QUOTA_NL_IHARDWARN:
  907                         msg = " file limit reached.\r\n";
  908                         break;
  909                 case QUOTA_NL_ISOFTLONGWARN:
  910                         msg = " file quota exceeded too long.\r\n";
  911                         break;
  912                 case QUOTA_NL_ISOFTWARN:
  913                         msg = " file quota exceeded.\r\n";
  914                         break;
  915                 case QUOTA_NL_BHARDWARN:
  916                         msg = " block limit reached.\r\n";
  917                         break;
  918                 case QUOTA_NL_BSOFTLONGWARN:
  919                         msg = " block quota exceeded too long.\r\n";
  920                         break;
  921                 case QUOTA_NL_BSOFTWARN:
  922                         msg = " block quota exceeded.\r\n";
  923                         break;
  924         }
  925         tty_write_message(tty, msg);
  926         tty_kref_put(tty);
  927 }
  928 #endif
  929 
  930 #ifdef CONFIG_QUOTA_NETLINK_INTERFACE
  931 
  932 /* Netlink family structure for quota */
  933 static struct genl_family quota_genl_family = {
  934         .id = GENL_ID_GENERATE,
  935         .hdrsize = 0,
  936         .name = "VFS_DQUOT",
  937         .version = 1,
  938         .maxattr = QUOTA_NL_A_MAX,
  939 };
  940 
  941 /* Send warning to userspace about user which exceeded quota */
  942 static void send_warning(const struct dquot *dquot, const char warntype)
  943 {
  944         static atomic_t seq;
  945         struct sk_buff *skb;
  946         void *msg_head;
  947         int ret;
  948         int msg_size = 4 * nla_total_size(sizeof(u32)) +
  949                        2 * nla_total_size(sizeof(u64));
  950 
  951         /* We have to allocate using GFP_NOFS as we are called from a
  952          * filesystem performing write and thus further recursion into
  953          * the fs to free some data could cause deadlocks. */
  954         skb = genlmsg_new(msg_size, GFP_NOFS);
  955         if (!skb) {
  956                 printk(KERN_ERR
  957                   "VFS: Not enough memory to send quota warning.\n");
  958                 return;
  959         }
  960         msg_head = genlmsg_put(skb, 0, atomic_add_return(1, &seq),
  961                         &quota_genl_family, 0, QUOTA_NL_C_WARNING);
  962         if (!msg_head) {
  963                 printk(KERN_ERR
  964                   "VFS: Cannot store netlink header in quota warning.\n");
  965                 goto err_out;
  966         }
  967         ret = nla_put_u32(skb, QUOTA_NL_A_QTYPE, dquot->dq_type);
  968         if (ret)
  969                 goto attr_err_out;
  970         ret = nla_put_u64(skb, QUOTA_NL_A_EXCESS_ID, dquot->dq_id);
  971         if (ret)
  972                 goto attr_err_out;
  973         ret = nla_put_u32(skb, QUOTA_NL_A_WARNING, warntype);
  974         if (ret)
  975                 goto attr_err_out;
  976         ret = nla_put_u32(skb, QUOTA_NL_A_DEV_MAJOR,
  977                 MAJOR(dquot->dq_sb->s_dev));
  978         if (ret)
  979                 goto attr_err_out;
  980         ret = nla_put_u32(skb, QUOTA_NL_A_DEV_MINOR,
  981                 MINOR(dquot->dq_sb->s_dev));
  982         if (ret)
  983                 goto attr_err_out;
  984         ret = nla_put_u64(skb, QUOTA_NL_A_CAUSED_ID, current->user->uid);
  985         if (ret)
  986                 goto attr_err_out;
  987         genlmsg_end(skb, msg_head);
  988 
  989         ret = genlmsg_multicast(skb, 0, quota_genl_family.id, GFP_NOFS);
  990         if (ret < 0 && ret != -ESRCH)
  991                 printk(KERN_ERR
  992                         "VFS: Failed to send notification message: %d\n", ret);
  993         return;
  994 attr_err_out:
  995         printk(KERN_ERR "VFS: Not enough space to compose quota message!\n");
  996 err_out:
  997         kfree_skb(skb);
  998 }
  999 #endif
 1000 
 1001 static inline void flush_warnings(struct dquot * const *dquots, char *warntype)
 1002 {
 1003         int i;
 1004 
 1005         for (i = 0; i < MAXQUOTAS; i++)
 1006                 if (dquots[i] != NODQUOT && warntype[i] != QUOTA_NL_NOWARN &&
 1007                     !warning_issued(dquots[i], warntype[i])) {
 1008 #ifdef CONFIG_PRINT_QUOTA_WARNING
 1009                         print_warning(dquots[i], warntype[i]);
 1010 #endif
 1011 #ifdef CONFIG_QUOTA_NETLINK_INTERFACE
 1012                         send_warning(dquots[i], warntype[i]);
 1013 #endif
 1014                 }
 1015 }
 1016 
 1017 static inline char ignore_hardlimit(struct dquot *dquot)
 1018 {
 1019         struct mem_dqinfo *info = &sb_dqopt(dquot->dq_sb)->info[dquot->dq_type];
 1020 
 1021         return capable(CAP_SYS_RESOURCE) &&
 1022             (info->dqi_format->qf_fmt_id != QFMT_VFS_OLD || !(info->dqi_flags & V1_DQF_RSQUASH));
 1023 }
 1024 
 1025 /* needs dq_data_lock */
 1026 static int check_idq(struct dquot *dquot, ulong inodes, char *warntype)
 1027 {
 1028         *warntype = QUOTA_NL_NOWARN;
 1029         if (inodes <= 0 || test_bit(DQ_FAKE_B, &dquot->dq_flags))
 1030                 return QUOTA_OK;
 1031 
 1032         if (dquot->dq_dqb.dqb_ihardlimit &&
 1033            (dquot->dq_dqb.dqb_curinodes + inodes) > dquot->dq_dqb.dqb_ihardlimit &&
 1034             !ignore_hardlimit(dquot)) {
 1035                 *warntype = QUOTA_NL_IHARDWARN;
 1036                 return NO_QUOTA;
 1037         }
 1038 
 1039         if (dquot->dq_dqb.dqb_isoftlimit &&
 1040            (dquot->dq_dqb.dqb_curinodes + inodes) > dquot->dq_dqb.dqb_isoftlimit &&
 1041             dquot->dq_dqb.dqb_itime && get_seconds() >= dquot->dq_dqb.dqb_itime &&
 1042             !ignore_hardlimit(dquot)) {
 1043                 *warntype = QUOTA_NL_ISOFTLONGWARN;
 1044                 return NO_QUOTA;
 1045         }
 1046 
 1047         if (dquot->dq_dqb.dqb_isoftlimit &&
 1048            (dquot->dq_dqb.dqb_curinodes + inodes) > dquot->dq_dqb.dqb_isoftlimit &&
 1049             dquot->dq_dqb.dqb_itime == 0) {
 1050                 *warntype = QUOTA_NL_ISOFTWARN;
 1051                 dquot->dq_dqb.dqb_itime = get_seconds() + sb_dqopt(dquot->dq_sb)->info[dquot->dq_type].dqi_igrace;
 1052         }
 1053 
 1054         return QUOTA_OK;
 1055 }
 1056 
 1057 /* needs dq_data_lock */
 1058 static int check_bdq(struct dquot *dquot, qsize_t space, int prealloc, char *warntype)
 1059 {
 1060         *warntype = QUOTA_NL_NOWARN;
 1061         if (space <= 0 || test_bit(DQ_FAKE_B, &dquot->dq_flags))
 1062                 return QUOTA_OK;
 1063 
 1064         if (dquot->dq_dqb.dqb_bhardlimit &&
 1065            toqb(dquot->dq_dqb.dqb_curspace + space) > dquot->dq_dqb.dqb_bhardlimit &&
 1066             !ignore_hardlimit(dquot)) {
 1067                 if (!prealloc)
 1068                         *warntype = QUOTA_NL_BHARDWARN;
 1069                 return NO_QUOTA;
 1070         }
 1071 
 1072         if (dquot->dq_dqb.dqb_bsoftlimit &&
 1073            toqb(dquot->dq_dqb.dqb_curspace + space) > dquot->dq_dqb.dqb_bsoftlimit &&
 1074             dquot->dq_dqb.dqb_btime && get_seconds() >= dquot->dq_dqb.dqb_btime &&
 1075             !ignore_hardlimit(dquot)) {
 1076                 if (!prealloc)
 1077                         *warntype = QUOTA_NL_BSOFTLONGWARN;
 1078                 return NO_QUOTA;
 1079         }
 1080 
 1081         if (dquot->dq_dqb.dqb_bsoftlimit &&
 1082            toqb(dquot->dq_dqb.dqb_curspace + space) > dquot->dq_dqb.dqb_bsoftlimit &&
 1083             dquot->dq_dqb.dqb_btime == 0) {
 1084                 if (!prealloc) {
 1085                         *warntype = QUOTA_NL_BSOFTWARN;
 1086                         dquot->dq_dqb.dqb_btime = get_seconds() + sb_dqopt(dquot->dq_sb)->info[dquot->dq_type].dqi_bgrace;
 1087                 }
 1088                 else
 1089                         /*
 1090                          * We don't allow preallocation to exceed softlimit so exceeding will
 1091                          * be always printed
 1092                          */
 1093                         return NO_QUOTA;
 1094         }
 1095 
 1096         return QUOTA_OK;
 1097 }
 1098 
 1099 static int info_idq_free(struct dquot *dquot, ulong inodes)
 1100 {
 1101         if (test_bit(DQ_FAKE_B, &dquot->dq_flags) ||
 1102             dquot->dq_dqb.dqb_curinodes <= dquot->dq_dqb.dqb_isoftlimit)
 1103                 return QUOTA_NL_NOWARN;
 1104 
 1105         if (dquot->dq_dqb.dqb_curinodes - inodes <= dquot->dq_dqb.dqb_isoftlimit)
 1106                 return QUOTA_NL_ISOFTBELOW;
 1107         if (dquot->dq_dqb.dqb_curinodes >= dquot->dq_dqb.dqb_ihardlimit &&
 1108             dquot->dq_dqb.dqb_curinodes - inodes < dquot->dq_dqb.dqb_ihardlimit)
 1109                 return QUOTA_NL_IHARDBELOW;
 1110         return QUOTA_NL_NOWARN;
 1111 }
 1112 
 1113 static int info_bdq_free(struct dquot *dquot, qsize_t space)
 1114 {
 1115         if (test_bit(DQ_FAKE_B, &dquot->dq_flags) ||
 1116             toqb(dquot->dq_dqb.dqb_curspace) <= dquot->dq_dqb.dqb_bsoftlimit)
 1117                 return QUOTA_NL_NOWARN;
 1118 
 1119         if (toqb(dquot->dq_dqb.dqb_curspace - space) <=
 1120             dquot->dq_dqb.dqb_bsoftlimit)
 1121                 return QUOTA_NL_BSOFTBELOW;
 1122         if (toqb(dquot->dq_dqb.dqb_curspace) >= dquot->dq_dqb.dqb_bhardlimit &&
 1123             toqb(dquot->dq_dqb.dqb_curspace - space) <
 1124                                                 dquot->dq_dqb.dqb_bhardlimit)
 1125                 return QUOTA_NL_BHARDBELOW;
 1126         return QUOTA_NL_NOWARN;
 1127 }
 1128 /*
 1129  *      Initialize quota pointers in inode
 1130  *      Transaction must be started at entry
 1131  */
 1132 int dquot_initialize(struct inode *inode, int type)
 1133 {
 1134         unsigned int id = 0;
 1135         int cnt, ret = 0;
 1136 
 1137         /* First test before acquiring mutex - solves deadlocks when we
 1138          * re-enter the quota code and are already holding the mutex */
 1139         if (IS_NOQUOTA(inode))
 1140                 return 0;
 1141         down_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1142         /* Having dqptr_sem we know NOQUOTA flags can't be altered... */
 1143         if (IS_NOQUOTA(inode))
 1144                 goto out_err;
 1145         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1146                 if (type != -1 && cnt != type)
 1147                         continue;
 1148                 if (inode->i_dquot[cnt] == NODQUOT) {
 1149                         switch (cnt) {
 1150                                 case USRQUOTA:
 1151                                         id = inode->i_uid;
 1152                                         break;
 1153                                 case GRPQUOTA:
 1154                                         id = inode->i_gid;
 1155                                         break;
 1156                         }
 1157                         inode->i_dquot[cnt] = dqget(inode->i_sb, id, cnt);
 1158                 }
 1159         }
 1160 out_err:
 1161         up_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1162         return ret;
 1163 }
 1164 
 1165 /*
 1166  *      Release all quotas referenced by inode
 1167  *      Transaction must be started at an entry
 1168  */
 1169 int dquot_drop(struct inode *inode)
 1170 {
 1171         int cnt;
 1172 
 1173         down_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1174         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1175                 if (inode->i_dquot[cnt] != NODQUOT) {
 1176                         dqput(inode->i_dquot[cnt]);
 1177                         inode->i_dquot[cnt] = NODQUOT;
 1178                 }
 1179         }
 1180         up_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1181         return 0;
 1182 }
 1183 
 1184 /* Wrapper to remove references to quota structures from inode */
 1185 void vfs_dq_drop(struct inode *inode)
 1186 {
 1187         /* Here we can get arbitrary inode from clear_inode() so we have
 1188          * to be careful. OTOH we don't need locking as quota operations
 1189          * are allowed to change only at mount time */
 1190         if (!IS_NOQUOTA(inode) && inode->i_sb && inode->i_sb->dq_op
 1191             && inode->i_sb->dq_op->drop) {
 1192                 int cnt;
 1193                 /* Test before calling to rule out calls from proc and such
 1194                  * where we are not allowed to block. Note that this is
 1195                  * actually reliable test even without the lock - the caller
 1196                  * must assure that nobody can come after the DQUOT_DROP and
 1197                  * add quota pointers back anyway */
 1198                 for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1199                         if (inode->i_dquot[cnt] != NODQUOT)
 1200                                 break;
 1201                 if (cnt < MAXQUOTAS)
 1202                         inode->i_sb->dq_op->drop(inode);
 1203         }
 1204 }
 1205 
 1206 /*
 1207  * Following four functions update i_blocks+i_bytes fields and
 1208  * quota information (together with appropriate checks)
 1209  * NOTE: We absolutely rely on the fact that caller dirties
 1210  * the inode (usually macros in quotaops.h care about this) and
 1211  * holds a handle for the current transaction so that dquot write and
 1212  * inode write go into the same transaction.
 1213  */
 1214 
 1215 /*
 1216  * This operation can block, but only after everything is updated
 1217  */
 1218 int dquot_alloc_space(struct inode *inode, qsize_t number, int warn)
 1219 {
 1220         int cnt, ret = NO_QUOTA;
 1221         char warntype[MAXQUOTAS];
 1222 
 1223         /* First test before acquiring mutex - solves deadlocks when we
 1224          * re-enter the quota code and are already holding the mutex */
 1225         if (IS_NOQUOTA(inode)) {
 1226 out_add:
 1227                 inode_add_bytes(inode, number);
 1228                 return QUOTA_OK;
 1229         }
 1230         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1231                 warntype[cnt] = QUOTA_NL_NOWARN;
 1232 
 1233         down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1234         if (IS_NOQUOTA(inode)) {        /* Now we can do reliable test... */
 1235                 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1236                 goto out_add;
 1237         }
 1238         spin_lock(&dq_data_lock);
 1239         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1240                 if (inode->i_dquot[cnt] == NODQUOT)
 1241                         continue;
 1242                 if (check_bdq(inode->i_dquot[cnt], number, warn, warntype+cnt) == NO_QUOTA)
 1243                         goto warn_put_all;
 1244         }
 1245         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1246                 if (inode->i_dquot[cnt] == NODQUOT)
 1247                         continue;
 1248                 dquot_incr_space(inode->i_dquot[cnt], number);
 1249         }
 1250         inode_add_bytes(inode, number);
 1251         ret = QUOTA_OK;
 1252 warn_put_all:
 1253         spin_unlock(&dq_data_lock);
 1254         if (ret == QUOTA_OK)
 1255                 /* Dirtify all the dquots - this can block when journalling */
 1256                 for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1257                         if (inode->i_dquot[cnt])
 1258                                 mark_dquot_dirty(inode->i_dquot[cnt]);
 1259         flush_warnings(inode->i_dquot, warntype);
 1260         up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1261         return ret;
 1262 }
 1263 
 1264 /*
 1265  * This operation can block, but only after everything is updated
 1266  */
 1267 int dquot_alloc_inode(const struct inode *inode, unsigned long number)
 1268 {
 1269         int cnt, ret = NO_QUOTA;
 1270         char warntype[MAXQUOTAS];
 1271 
 1272         /* First test before acquiring mutex - solves deadlocks when we
 1273          * re-enter the quota code and are already holding the mutex */
 1274         if (IS_NOQUOTA(inode))
 1275                 return QUOTA_OK;
 1276         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1277                 warntype[cnt] = QUOTA_NL_NOWARN;
 1278         down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1279         if (IS_NOQUOTA(inode)) {
 1280                 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1281                 return QUOTA_OK;
 1282         }
 1283         spin_lock(&dq_data_lock);
 1284         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1285                 if (inode->i_dquot[cnt] == NODQUOT)
 1286                         continue;
 1287                 if (check_idq(inode->i_dquot[cnt], number, warntype+cnt) == NO_QUOTA)
 1288                         goto warn_put_all;
 1289         }
 1290 
 1291         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1292                 if (inode->i_dquot[cnt] == NODQUOT)
 1293                         continue;
 1294                 dquot_incr_inodes(inode->i_dquot[cnt], number);
 1295         }
 1296         ret = QUOTA_OK;
 1297 warn_put_all:
 1298         spin_unlock(&dq_data_lock);
 1299         if (ret == QUOTA_OK)
 1300                 /* Dirtify all the dquots - this can block when journalling */
 1301                 for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1302                         if (inode->i_dquot[cnt])
 1303                                 mark_dquot_dirty(inode->i_dquot[cnt]);
 1304         flush_warnings(inode->i_dquot, warntype);
 1305         up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1306         return ret;
 1307 }
 1308 
 1309 /*
 1310  * This operation can block, but only after everything is updated
 1311  */
 1312 int dquot_free_space(struct inode *inode, qsize_t number)
 1313 {
 1314         unsigned int cnt;
 1315         char warntype[MAXQUOTAS];
 1316 
 1317         /* First test before acquiring mutex - solves deadlocks when we
 1318          * re-enter the quota code and are already holding the mutex */
 1319         if (IS_NOQUOTA(inode)) {
 1320 out_sub:
 1321                 inode_sub_bytes(inode, number);
 1322                 return QUOTA_OK;
 1323         }
 1324 
 1325         down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1326         /* Now recheck reliably when holding dqptr_sem */
 1327         if (IS_NOQUOTA(inode)) {
 1328                 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1329                 goto out_sub;
 1330         }
 1331         spin_lock(&dq_data_lock);
 1332         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1333                 if (inode->i_dquot[cnt] == NODQUOT)
 1334                         continue;
 1335                 warntype[cnt] = info_bdq_free(inode->i_dquot[cnt], number);
 1336                 dquot_decr_space(inode->i_dquot[cnt], number);
 1337         }
 1338         inode_sub_bytes(inode, number);
 1339         spin_unlock(&dq_data_lock);
 1340         /* Dirtify all the dquots - this can block when journalling */
 1341         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1342                 if (inode->i_dquot[cnt])
 1343                         mark_dquot_dirty(inode->i_dquot[cnt]);
 1344         flush_warnings(inode->i_dquot, warntype);
 1345         up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1346         return QUOTA_OK;
 1347 }
 1348 
 1349 /*
 1350  * This operation can block, but only after everything is updated
 1351  */
 1352 int dquot_free_inode(const struct inode *inode, unsigned long number)
 1353 {
 1354         unsigned int cnt;
 1355         char warntype[MAXQUOTAS];
 1356 
 1357         /* First test before acquiring mutex - solves deadlocks when we
 1358          * re-enter the quota code and are already holding the mutex */
 1359         if (IS_NOQUOTA(inode))
 1360                 return QUOTA_OK;
 1361 
 1362         down_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1363         /* Now recheck reliably when holding dqptr_sem */
 1364         if (IS_NOQUOTA(inode)) {
 1365                 up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1366                 return QUOTA_OK;
 1367         }
 1368         spin_lock(&dq_data_lock);
 1369         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1370                 if (inode->i_dquot[cnt] == NODQUOT)
 1371                         continue;
 1372                 warntype[cnt] = info_idq_free(inode->i_dquot[cnt], number);
 1373                 dquot_decr_inodes(inode->i_dquot[cnt], number);
 1374         }
 1375         spin_unlock(&dq_data_lock);
 1376         /* Dirtify all the dquots - this can block when journalling */
 1377         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1378                 if (inode->i_dquot[cnt])
 1379                         mark_dquot_dirty(inode->i_dquot[cnt]);
 1380         flush_warnings(inode->i_dquot, warntype);
 1381         up_read(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1382         return QUOTA_OK;
 1383 }
 1384 
 1385 /*
 1386  * Transfer the number of inode and blocks from one diskquota to an other.
 1387  *
 1388  * This operation can block, but only after everything is updated
 1389  * A transaction must be started when entering this function.
 1390  */
 1391 int dquot_transfer(struct inode *inode, struct iattr *iattr)
 1392 {
 1393         qsize_t space;
 1394         struct dquot *transfer_from[MAXQUOTAS];
 1395         struct dquot *transfer_to[MAXQUOTAS];
 1396         int cnt, ret = NO_QUOTA, chuid = (iattr->ia_valid & ATTR_UID) && inode->i_uid != iattr->ia_uid,
 1397             chgid = (iattr->ia_valid & ATTR_GID) && inode->i_gid != iattr->ia_gid;
 1398         char warntype_to[MAXQUOTAS];
 1399         char warntype_from_inodes[MAXQUOTAS], warntype_from_space[MAXQUOTAS];
 1400 
 1401         /* First test before acquiring mutex - solves deadlocks when we
 1402          * re-enter the quota code and are already holding the mutex */
 1403         if (IS_NOQUOTA(inode))
 1404                 return QUOTA_OK;
 1405         /* Clear the arrays */
 1406         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1407                 transfer_to[cnt] = transfer_from[cnt] = NODQUOT;
 1408                 warntype_to[cnt] = QUOTA_NL_NOWARN;
 1409         }
 1410         down_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1411         /* Now recheck reliably when holding dqptr_sem */
 1412         if (IS_NOQUOTA(inode)) {        /* File without quota accounting? */
 1413                 up_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1414                 return QUOTA_OK;
 1415         }
 1416         /* First build the transfer_to list - here we can block on
 1417          * reading/instantiating of dquots.  We know that the transaction for
 1418          * us was already started so we don't violate lock ranking here */
 1419         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1420                 switch (cnt) {
 1421                         case USRQUOTA:
 1422                                 if (!chuid)
 1423                                         continue;
 1424                                 transfer_to[cnt] = dqget(inode->i_sb, iattr->ia_uid, cnt);
 1425                                 break;
 1426                         case GRPQUOTA:
 1427                                 if (!chgid)
 1428                                         continue;
 1429                                 transfer_to[cnt] = dqget(inode->i_sb, iattr->ia_gid, cnt);
 1430                                 break;
 1431                 }
 1432         }
 1433         spin_lock(&dq_data_lock);
 1434         space = inode_get_bytes(inode);
 1435         /* Build the transfer_from list and check the limits */
 1436         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1437                 if (transfer_to[cnt] == NODQUOT)
 1438                         continue;
 1439                 transfer_from[cnt] = inode->i_dquot[cnt];
 1440                 if (check_idq(transfer_to[cnt], 1, warntype_to + cnt) ==
 1441                     NO_QUOTA || check_bdq(transfer_to[cnt], space, 0,
 1442                     warntype_to + cnt) == NO_QUOTA)
 1443                         goto warn_put_all;
 1444         }
 1445 
 1446         /*
 1447          * Finally perform the needed transfer from transfer_from to transfer_to
 1448          */
 1449         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1450                 /*
 1451                  * Skip changes for same uid or gid or for turned off quota-type.
 1452                  */
 1453                 if (transfer_to[cnt] == NODQUOT)
 1454                         continue;
 1455 
 1456                 /* Due to IO error we might not have transfer_from[] structure */
 1457                 if (transfer_from[cnt]) {
 1458                         warntype_from_inodes[cnt] =
 1459                                 info_idq_free(transfer_from[cnt], 1);
 1460                         warntype_from_space[cnt] =
 1461                                 info_bdq_free(transfer_from[cnt], space);
 1462                         dquot_decr_inodes(transfer_from[cnt], 1);
 1463                         dquot_decr_space(transfer_from[cnt], space);
 1464                 }
 1465 
 1466                 dquot_incr_inodes(transfer_to[cnt], 1);
 1467                 dquot_incr_space(transfer_to[cnt], space);
 1468 
 1469                 inode->i_dquot[cnt] = transfer_to[cnt];
 1470         }
 1471         ret = QUOTA_OK;
 1472 warn_put_all:
 1473         spin_unlock(&dq_data_lock);
 1474         /* Dirtify all the dquots - this can block when journalling */
 1475         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1476                 if (transfer_from[cnt])
 1477                         mark_dquot_dirty(transfer_from[cnt]);
 1478                 if (transfer_to[cnt])
 1479                         mark_dquot_dirty(transfer_to[cnt]);
 1480         }
 1481         flush_warnings(transfer_to, warntype_to);
 1482         flush_warnings(transfer_from, warntype_from_inodes);
 1483         flush_warnings(transfer_from, warntype_from_space);
 1484         
 1485         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1486                 if (ret == QUOTA_OK && transfer_from[cnt] != NODQUOT)
 1487                         dqput(transfer_from[cnt]);
 1488                 if (ret == NO_QUOTA && transfer_to[cnt] != NODQUOT)
 1489                         dqput(transfer_to[cnt]);
 1490         }
 1491         up_write(&sb_dqopt(inode->i_sb)->dqptr_sem);
 1492         return ret;
 1493 }
 1494 
 1495 /* Wrapper for transferring ownership of an inode */
 1496 int vfs_dq_transfer(struct inode *inode, struct iattr *iattr)
 1497 {
 1498         if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) {
 1499                 vfs_dq_init(inode);
 1500                 if (inode->i_sb->dq_op->transfer(inode, iattr) == NO_QUOTA)
 1501                         return 1;
 1502         }
 1503         return 0;
 1504 }
 1505 
 1506 
 1507 /*
 1508  * Write info of quota file to disk
 1509  */
 1510 int dquot_commit_info(struct super_block *sb, int type)
 1511 {
 1512         int ret;
 1513         struct quota_info *dqopt = sb_dqopt(sb);
 1514 
 1515         mutex_lock(&dqopt->dqio_mutex);
 1516         ret = dqopt->ops[type]->write_file_info(sb, type);
 1517         mutex_unlock(&dqopt->dqio_mutex);
 1518         return ret;
 1519 }
 1520 
 1521 /*
 1522  * Definitions of diskquota operations.
 1523  */
 1524 struct dquot_operations dquot_operations = {
 1525         .initialize     = dquot_initialize,
 1526         .drop           = dquot_drop,
 1527         .alloc_space    = dquot_alloc_space,
 1528         .alloc_inode    = dquot_alloc_inode,
 1529         .free_space     = dquot_free_space,
 1530         .free_inode     = dquot_free_inode,
 1531         .transfer       = dquot_transfer,
 1532         .write_dquot    = dquot_commit,
 1533         .acquire_dquot  = dquot_acquire,
 1534         .release_dquot  = dquot_release,
 1535         .mark_dirty     = dquot_mark_dquot_dirty,
 1536         .write_info     = dquot_commit_info
 1537 };
 1538 
 1539 static inline void set_enable_flags(struct quota_info *dqopt, int type)
 1540 {
 1541         switch (type) {
 1542                 case USRQUOTA:
 1543                         dqopt->flags |= DQUOT_USR_ENABLED;
 1544                         dqopt->flags &= ~DQUOT_USR_SUSPENDED;
 1545                         break;
 1546                 case GRPQUOTA:
 1547                         dqopt->flags |= DQUOT_GRP_ENABLED;
 1548                         dqopt->flags &= ~DQUOT_GRP_SUSPENDED;
 1549                         break;
 1550         }
 1551 }
 1552 
 1553 static inline void reset_enable_flags(struct quota_info *dqopt, int type,
 1554                                       int remount)
 1555 {
 1556         switch (type) {
 1557                 case USRQUOTA:
 1558                         dqopt->flags &= ~DQUOT_USR_ENABLED;
 1559                         if (remount)
 1560                                 dqopt->flags |= DQUOT_USR_SUSPENDED;
 1561                         else
 1562                                 dqopt->flags &= ~DQUOT_USR_SUSPENDED;
 1563                         break;
 1564                 case GRPQUOTA:
 1565                         dqopt->flags &= ~DQUOT_GRP_ENABLED;
 1566                         if (remount)
 1567                                 dqopt->flags |= DQUOT_GRP_SUSPENDED;
 1568                         else
 1569                                 dqopt->flags &= ~DQUOT_GRP_SUSPENDED;
 1570                         break;
 1571         }
 1572 }
 1573 
 1574 
 1575 /*
 1576  * Turn quota off on a device. type == -1 ==> quotaoff for all types (umount)
 1577  */
 1578 int vfs_quota_off(struct super_block *sb, int type, int remount)
 1579 {
 1580         int cnt, ret = 0;
 1581         struct quota_info *dqopt = sb_dqopt(sb);
 1582         struct inode *toputinode[MAXQUOTAS];
 1583 
 1584         /* We need to serialize quota_off() for device */
 1585         mutex_lock(&dqopt->dqonoff_mutex);
 1586 
 1587         /*
 1588          * Skip everything if there's nothing to do. We have to do this because
 1589          * sometimes we are called when fill_super() failed and calling
 1590          * sync_fs() in such cases does no good.
 1591          */
 1592         if (!sb_any_quota_enabled(sb) && !sb_any_quota_suspended(sb)) {
 1593                 mutex_unlock(&dqopt->dqonoff_mutex);
 1594                 return 0;
 1595         }
 1596         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1597                 toputinode[cnt] = NULL;
 1598                 if (type != -1 && cnt != type)
 1599                         continue;
 1600                 /* If we keep inodes of quota files after remount and quotaoff
 1601                  * is called, drop kept inodes. */
 1602                 if (!remount && sb_has_quota_suspended(sb, cnt)) {
 1603                         iput(dqopt->files[cnt]);
 1604                         dqopt->files[cnt] = NULL;
 1605                         reset_enable_flags(dqopt, cnt, 0);
 1606                         continue;
 1607                 }
 1608                 if (!sb_has_quota_enabled(sb, cnt))
 1609                         continue;
 1610                 reset_enable_flags(dqopt, cnt, remount);
 1611 
 1612                 /* Note: these are blocking operations */
 1613                 drop_dquot_ref(sb, cnt);
 1614                 invalidate_dquots(sb, cnt);
 1615                 /*
 1616                  * Now all dquots should be invalidated, all writes done so we should be only
 1617                  * users of the info. No locks needed.
 1618                  */
 1619                 if (info_dirty(&dqopt->info[cnt]))
 1620                         sb->dq_op->write_info(sb, cnt);
 1621                 if (dqopt->ops[cnt]->free_file_info)
 1622                         dqopt->ops[cnt]->free_file_info(sb, cnt);
 1623                 put_quota_format(dqopt->info[cnt].dqi_format);
 1624 
 1625                 toputinode[cnt] = dqopt->files[cnt];
 1626                 if (!remount)
 1627                         dqopt->files[cnt] = NULL;
 1628                 dqopt->info[cnt].dqi_flags = 0;
 1629                 dqopt->info[cnt].dqi_igrace = 0;
 1630                 dqopt->info[cnt].dqi_bgrace = 0;
 1631                 dqopt->ops[cnt] = NULL;
 1632         }
 1633         mutex_unlock(&dqopt->dqonoff_mutex);
 1634         /* Sync the superblock so that buffers with quota data are written to
 1635          * disk (and so userspace sees correct data afterwards). */
 1636         if (sb->s_op->sync_fs)
 1637                 sb->s_op->sync_fs(sb, 1);
 1638         sync_blockdev(sb->s_bdev);
 1639         /* Now the quota files are just ordinary files and we can set the
 1640          * inode flags back. Moreover we discard the pagecache so that
 1641          * userspace sees the writes we did bypassing the pagecache. We
 1642          * must also discard the blockdev buffers so that we see the
 1643          * changes done by userspace on the next quotaon() */
 1644         for (cnt = 0; cnt < MAXQUOTAS; cnt++)
 1645                 if (toputinode[cnt]) {
 1646                         mutex_lock(&dqopt->dqonoff_mutex);
 1647                         /* If quota was reenabled in the meantime, we have
 1648                          * nothing to do */
 1649                         if (!sb_has_quota_enabled(sb, cnt)) {
 1650                                 mutex_lock_nested(&toputinode[cnt]->i_mutex, I_MUTEX_QUOTA);
 1651                                 toputinode[cnt]->i_flags &= ~(S_IMMUTABLE |
 1652                                   S_NOATIME | S_NOQUOTA);
 1653                                 truncate_inode_pages(&toputinode[cnt]->i_data, 0);
 1654                                 mutex_unlock(&toputinode[cnt]->i_mutex);
 1655                                 mark_inode_dirty(toputinode[cnt]);
 1656                         }
 1657                         mutex_unlock(&dqopt->dqonoff_mutex);
 1658                         /* On remount RO, we keep the inode pointer so that we
 1659                          * can reenable quota on the subsequent remount RW.
 1660                          * But we have better not keep inode pointer when there
 1661                          * is pending delete on the quota file... */
 1662                         if (!remount)
 1663                                 iput(toputinode[cnt]);
 1664                         else if (!toputinode[cnt]->i_nlink)
 1665                                 ret = -EBUSY;
 1666                 }
 1667         if (sb->s_bdev)
 1668                 invalidate_bdev(sb->s_bdev);
 1669         return ret;
 1670 }
 1671 
 1672 /*
 1673  *      Turn quotas on on a device
 1674  */
 1675 
 1676 /* Helper function when we already have the inode */
 1677 static int vfs_quota_on_inode(struct inode *inode, int type, int format_id)
 1678 {
 1679         struct quota_format_type *fmt = find_quota_format(format_id);
 1680         struct super_block *sb = inode->i_sb;
 1681         struct quota_info *dqopt = sb_dqopt(sb);
 1682         int error;
 1683         int oldflags = -1;
 1684 
 1685         if (!fmt)
 1686                 return -ESRCH;
 1687         if (!S_ISREG(inode->i_mode)) {
 1688                 error = -EACCES;
 1689                 goto out_fmt;
 1690         }
 1691         if (IS_RDONLY(inode)) {
 1692                 error = -EROFS;
 1693                 goto out_fmt;
 1694         }
 1695         if (!sb->s_op->quota_write || !sb->s_op->quota_read) {
 1696                 error = -EINVAL;
 1697                 goto out_fmt;
 1698         }
 1699 
 1700         /* As we bypass the pagecache we must now flush the inode so that
 1701          * we see all the changes from userspace... */
 1702         write_inode_now(inode, 1);
 1703         /* And now flush the block cache so that kernel sees the changes */
 1704         invalidate_bdev(sb->s_bdev);
 1705         mutex_lock(&inode->i_mutex);
 1706         mutex_lock(&dqopt->dqonoff_mutex);
 1707         if (sb_has_quota_enabled(sb, type) ||
 1708                         sb_has_quota_suspended(sb, type)) {
 1709                 error = -EBUSY;
 1710                 goto out_lock;
 1711         }
 1712         /* We don't want quota and atime on quota files (deadlocks possible)
 1713          * Also nobody should write to the file - we use special IO operations
 1714          * which ignore the immutable bit. */
 1715         down_write(&dqopt->dqptr_sem);
 1716         oldflags = inode->i_flags & (S_NOATIME | S_IMMUTABLE | S_NOQUOTA);
 1717         inode->i_flags |= S_NOQUOTA | S_NOATIME | S_IMMUTABLE;
 1718         up_write(&dqopt->dqptr_sem);
 1719         sb->dq_op->drop(inode);
 1720 
 1721         error = -EIO;
 1722         dqopt->files[type] = igrab(inode);
 1723         if (!dqopt->files[type])
 1724                 goto out_lock;
 1725         error = -EINVAL;
 1726         if (!fmt->qf_ops->check_quota_file(sb, type))
 1727                 goto out_file_init;
 1728 
 1729         dqopt->ops[type] = fmt->qf_ops;
 1730         dqopt->info[type].dqi_format = fmt;
 1731         dqopt->info[type].dqi_fmt_id = format_id;
 1732         INIT_LIST_HEAD(&dqopt->info[type].dqi_dirty_list);
 1733         mutex_lock(&dqopt->dqio_mutex);
 1734         if ((error = dqopt->ops[type]->read_file_info(sb, type)) < 0) {
 1735                 mutex_unlock(&dqopt->dqio_mutex);
 1736                 goto out_file_init;
 1737         }
 1738         mutex_unlock(&dqopt->dqio_mutex);
 1739         mutex_unlock(&inode->i_mutex);
 1740         set_enable_flags(dqopt, type);
 1741 
 1742         add_dquot_ref(sb, type);
 1743         mutex_unlock(&dqopt->dqonoff_mutex);
 1744 
 1745         return 0;
 1746 
 1747 out_file_init:
 1748         dqopt->files[type] = NULL;
 1749         iput(inode);
 1750 out_lock:
 1751         mutex_unlock(&dqopt->dqonoff_mutex);
 1752         if (oldflags != -1) {
 1753                 down_write(&dqopt->dqptr_sem);
 1754                 /* Set the flags back (in the case of accidental quotaon()
 1755                  * on a wrong file we don't want to mess up the flags) */
 1756                 inode->i_flags &= ~(S_NOATIME | S_NOQUOTA | S_IMMUTABLE);
 1757                 inode->i_flags |= oldflags;
 1758                 up_write(&dqopt->dqptr_sem);
 1759         }
 1760         mutex_unlock(&inode->i_mutex);
 1761 out_fmt:
 1762         put_quota_format(fmt);
 1763 
 1764         return error; 
 1765 }
 1766 
 1767 /* Reenable quotas on remount RW */
 1768 static int vfs_quota_on_remount(struct super_block *sb, int type)
 1769 {
 1770         struct quota_info *dqopt = sb_dqopt(sb);
 1771         struct inode *inode;
 1772         int ret;
 1773 
 1774         mutex_lock(&dqopt->dqonoff_mutex);
 1775         if (!sb_has_quota_suspended(sb, type)) {
 1776                 mutex_unlock(&dqopt->dqonoff_mutex);
 1777                 return 0;
 1778         }
 1779         BUG_ON(sb_has_quota_enabled(sb, type));
 1780 
 1781         inode = dqopt->files[type];
 1782         dqopt->files[type] = NULL;
 1783         reset_enable_flags(dqopt, type, 0);
 1784         mutex_unlock(&dqopt->dqonoff_mutex);
 1785 
 1786         ret = vfs_quota_on_inode(inode, type, dqopt->info[type].dqi_fmt_id);
 1787         iput(inode);
 1788 
 1789         return ret;
 1790 }
 1791 
 1792 int vfs_quota_on_path(struct super_block *sb, int type, int format_id,
 1793                       struct path *path)
 1794 {
 1795         int error = security_quota_on(path->dentry);
 1796         if (error)
 1797                 return error;
 1798         /* Quota file not on the same filesystem? */
 1799         if (path->mnt->mnt_sb != sb)
 1800                 error = -EXDEV;
 1801         else
 1802                 error = vfs_quota_on_inode(path->dentry->d_inode, type,
 1803                                            format_id);
 1804         return error;
 1805 }
 1806 
 1807 /* Actual function called from quotactl() */
 1808 int vfs_quota_on(struct super_block *sb, int type, int format_id, char *name,
 1809                  int remount)
 1810 {
 1811         struct path path;
 1812         int error;
 1813 
 1814         if (remount)
 1815                 return vfs_quota_on_remount(sb, type);
 1816 
 1817         error = kern_path(name, LOOKUP_FOLLOW, &path);
 1818         if (!error) {
 1819                 error = vfs_quota_on_path(sb, type, format_id, &path);
 1820                 path_put(&path);
 1821         }
 1822         return error;
 1823 }
 1824 
 1825 /*
 1826  * This function is used when filesystem needs to initialize quotas
 1827  * during mount time.
 1828  */
 1829 int vfs_quota_on_mount(struct super_block *sb, char *qf_name,
 1830                 int format_id, int type)
 1831 {
 1832         struct dentry *dentry;
 1833         int error;
 1834 
 1835         dentry = lookup_one_len(qf_name, sb->s_root, strlen(qf_name));
 1836         if (IS_ERR(dentry))
 1837                 return PTR_ERR(dentry);
 1838 
 1839         if (!dentry->d_inode) {
 1840                 error = -ENOENT;
 1841                 goto out;
 1842         }
 1843 
 1844         error = security_quota_on(dentry);
 1845         if (!error)
 1846                 error = vfs_quota_on_inode(dentry->d_inode, type, format_id);
 1847 
 1848 out:
 1849         dput(dentry);
 1850         return error;
 1851 }
 1852 
 1853 /* Wrapper to turn on quotas when remounting rw */
 1854 int vfs_dq_quota_on_remount(struct super_block *sb)
 1855 {
 1856         int cnt;
 1857         int ret = 0, err;
 1858 
 1859         if (!sb->s_qcop || !sb->s_qcop->quota_on)
 1860                 return -ENOSYS;
 1861         for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
 1862                 err = sb->s_qcop->quota_on(sb, cnt, 0, NULL, 1);
 1863                 if (err < 0 && !ret)
 1864                         ret = err;
 1865         }
 1866         return ret;
 1867 }
 1868 
 1869 /* Generic routine for getting common part of quota structure */
 1870 static void do_get_dqblk(struct dquot *dquot, struct if_dqblk *di)
 1871 {
 1872         struct mem_dqblk *dm = &dquot->dq_dqb;
 1873 
 1874         spin_lock(&dq_data_lock);
 1875         di->dqb_bhardlimit = dm->dqb_bhardlimit;
 1876         di->dqb_bsoftlimit = dm->dqb_bsoftlimit;
 1877         di->dqb_curspace = dm->dqb_curspace;
 1878         di->dqb_ihardlimit = dm->dqb_ihardlimit;
 1879         di->dqb_isoftlimit = dm->dqb_isoftlimit;
 1880         di->dqb_curinodes = dm->dqb_curinodes;
 1881         di->dqb_btime = dm->dqb_btime;
 1882         di->dqb_itime = dm->dqb_itime;
 1883         di->dqb_valid = QIF_ALL;
 1884         spin_unlock(&dq_data_lock);
 1885 }
 1886 
 1887 int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di)
 1888 {
 1889         struct dquot *dquot;
 1890 
 1891         mutex_lock(&sb_dqopt(sb)->dqonoff_mutex);
 1892         if (!(dquot = dqget(sb, id, type))) {
 1893                 mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 1894                 return -ESRCH;
 1895         }
 1896         do_get_dqblk(dquot, di);
 1897         dqput(dquot);
 1898         mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 1899         return 0;
 1900 }
 1901 
 1902 /* Generic routine for setting common part of quota structure */
 1903 static int do_set_dqblk(struct dquot *dquot, struct if_dqblk *di)
 1904 {
 1905         struct mem_dqblk *dm = &dquot->dq_dqb;
 1906         int check_blim = 0, check_ilim = 0;
 1907         struct mem_dqinfo *dqi = &sb_dqopt(dquot->dq_sb)->info[dquot->dq_type];
 1908 
 1909         if ((di->dqb_valid & QIF_BLIMITS &&
 1910              (di->dqb_bhardlimit > dqi->dqi_maxblimit ||
 1911               di->dqb_bsoftlimit > dqi->dqi_maxblimit)) ||
 1912             (di->dqb_valid & QIF_ILIMITS &&
 1913              (di->dqb_ihardlimit > dqi->dqi_maxilimit ||
 1914               di->dqb_isoftlimit > dqi->dqi_maxilimit)))
 1915                 return -ERANGE;
 1916 
 1917         spin_lock(&dq_data_lock);
 1918         if (di->dqb_valid & QIF_SPACE) {
 1919                 dm->dqb_curspace = di->dqb_curspace;
 1920                 check_blim = 1;
 1921         }
 1922         if (di->dqb_valid & QIF_BLIMITS) {
 1923                 dm->dqb_bsoftlimit = di->dqb_bsoftlimit;
 1924                 dm->dqb_bhardlimit = di->dqb_bhardlimit;
 1925                 check_blim = 1;
 1926         }
 1927         if (di->dqb_valid & QIF_INODES) {
 1928                 dm->dqb_curinodes = di->dqb_curinodes;
 1929                 check_ilim = 1;
 1930         }
 1931         if (di->dqb_valid & QIF_ILIMITS) {
 1932                 dm->dqb_isoftlimit = di->dqb_isoftlimit;
 1933                 dm->dqb_ihardlimit = di->dqb_ihardlimit;
 1934                 check_ilim = 1;
 1935         }
 1936         if (di->dqb_valid & QIF_BTIME)
 1937                 dm->dqb_btime = di->dqb_btime;
 1938         if (di->dqb_valid & QIF_ITIME)
 1939                 dm->dqb_itime = di->dqb_itime;
 1940 
 1941         if (check_blim) {
 1942                 if (!dm->dqb_bsoftlimit || toqb(dm->dqb_curspace) < dm->dqb_bsoftlimit) {
 1943                         dm->dqb_btime = 0;
 1944                         clear_bit(DQ_BLKS_B, &dquot->dq_flags);
 1945                 }
 1946                 else if (!(di->dqb_valid & QIF_BTIME))  /* Set grace only if user hasn't provided his own... */
 1947                         dm->dqb_btime = get_seconds() + dqi->dqi_bgrace;
 1948         }
 1949         if (check_ilim) {
 1950                 if (!dm->dqb_isoftlimit || dm->dqb_curinodes < dm->dqb_isoftlimit) {
 1951                         dm->dqb_itime = 0;
 1952                         clear_bit(DQ_INODES_B, &dquot->dq_flags);
 1953                 }
 1954                 else if (!(di->dqb_valid & QIF_ITIME))  /* Set grace only if user hasn't provided his own... */
 1955                         dm->dqb_itime = get_seconds() + dqi->dqi_igrace;
 1956         }
 1957         if (dm->dqb_bhardlimit || dm->dqb_bsoftlimit || dm->dqb_ihardlimit || dm->dqb_isoftlimit)
 1958                 clear_bit(DQ_FAKE_B, &dquot->dq_flags);
 1959         else
 1960                 set_bit(DQ_FAKE_B, &dquot->dq_flags);
 1961         spin_unlock(&dq_data_lock);
 1962         mark_dquot_dirty(dquot);
 1963 
 1964         return 0;
 1965 }
 1966 
 1967 int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di)
 1968 {
 1969         struct dquot *dquot;
 1970         int rc;
 1971 
 1972         mutex_lock(&sb_dqopt(sb)->dqonoff_mutex);
 1973         if (!(dquot = dqget(sb, id, type))) {
 1974                 mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 1975                 return -ESRCH;
 1976         }
 1977         rc = do_set_dqblk(dquot, di);
 1978         dqput(dquot);
 1979         mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 1980         return rc;
 1981 }
 1982 
 1983 /* Generic routine for getting common part of quota file information */
 1984 int vfs_get_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
 1985 {
 1986         struct mem_dqinfo *mi;
 1987   
 1988         mutex_lock(&sb_dqopt(sb)->dqonoff_mutex);
 1989         if (!sb_has_quota_enabled(sb, type)) {
 1990                 mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 1991                 return -ESRCH;
 1992         }
 1993         mi = sb_dqopt(sb)->info + type;
 1994         spin_lock(&dq_data_lock);
 1995         ii->dqi_bgrace = mi->dqi_bgrace;
 1996         ii->dqi_igrace = mi->dqi_igrace;
 1997         ii->dqi_flags = mi->dqi_flags & DQF_MASK;
 1998         ii->dqi_valid = IIF_ALL;
 1999         spin_unlock(&dq_data_lock);
 2000         mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 2001         return 0;
 2002 }
 2003 
 2004 /* Generic routine for setting common part of quota file information */
 2005 int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
 2006 {
 2007         struct mem_dqinfo *mi;
 2008 
 2009         mutex_lock(&sb_dqopt(sb)->dqonoff_mutex);
 2010         if (!sb_has_quota_enabled(sb, type)) {
 2011                 mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 2012                 return -ESRCH;
 2013         }
 2014         mi = sb_dqopt(sb)->info + type;
 2015         spin_lock(&dq_data_lock);
 2016         if (ii->dqi_valid & IIF_BGRACE)
 2017                 mi->dqi_bgrace = ii->dqi_bgrace;
 2018         if (ii->dqi_valid & IIF_IGRACE)
 2019                 mi->dqi_igrace = ii->dqi_igrace;
 2020         if (ii->dqi_valid & IIF_FLAGS)
 2021                 mi->dqi_flags = (mi->dqi_flags & ~DQF_MASK) | (ii->dqi_flags & DQF_MASK);
 2022         spin_unlock(&dq_data_lock);
 2023         mark_info_dirty(sb, type);
 2024         /* Force write to disk */
 2025         sb->dq_op->write_info(sb, type);
 2026         mutex_unlock(&sb_dqopt(sb)->dqonoff_mutex);
 2027         return 0;
 2028 }
 2029 
 2030 struct quotactl_ops vfs_quotactl_ops = {
 2031         .quota_on       = vfs_quota_on,
 2032         .quota_off      = vfs_quota_off,
 2033         .quota_sync     = vfs_quota_sync,
 2034         .get_info       = vfs_get_dqinfo,
 2035         .set_info       = vfs_set_dqinfo,
 2036         .get_dqblk      = vfs_get_dqblk,
 2037         .set_dqblk      = vfs_set_dqblk
 2038 };
 2039 
 2040 static ctl_table fs_dqstats_table[] = {
 2041         {
 2042                 .ctl_name       = FS_DQ_LOOKUPS,
 2043                 .procname       = "lookups",
 2044                 .data           = &dqstats.lookups,
 2045                 .maxlen         = sizeof(int),
 2046                 .mode           = 0444,
 2047                 .proc_handler   = &proc_dointvec,
 2048         },
 2049         {
 2050                 .ctl_name       = FS_DQ_DROPS,
 2051                 .procname       = "drops",
 2052                 .data           = &dqstats.drops,
 2053                 .maxlen         = sizeof(int),
 2054                 .mode           = 0444,
 2055                 .proc_handler   = &proc_dointvec,
 2056         },
 2057         {
 2058                 .ctl_name       = FS_DQ_READS,
 2059                 .procname       = "reads",
 2060                 .data           = &dqstats.reads,
 2061                 .maxlen         = sizeof(int),
 2062                 .mode           = 0444,
 2063                 .proc_handler   = &proc_dointvec,
 2064         },
 2065         {
 2066                 .ctl_name       = FS_DQ_WRITES,
 2067                 .procname       = "writes",
 2068                 .data           = &dqstats.writes,
 2069                 .maxlen         = sizeof(int),
 2070                 .mode           = 0444,
 2071                 .proc_handler   = &proc_dointvec,
 2072         },
 2073         {
 2074                 .ctl_name       = FS_DQ_CACHE_HITS,
 2075                 .procname       = "cache_hits",
 2076                 .data           = &dqstats.cache_hits,
 2077                 .maxlen         = sizeof(int),
 2078                 .mode           = 0444,
 2079                 .proc_handler   = &proc_dointvec,
 2080         },
 2081         {
 2082                 .ctl_name       = FS_DQ_ALLOCATED,
 2083                 .procname       = "allocated_dquots",
 2084                 .data           = &dqstats.allocated_dquots,
 2085                 .maxlen         = sizeof(int),
 2086                 .mode           = 0444,
 2087                 .proc_handler   = &proc_dointvec,
 2088         },
 2089         {
 2090                 .ctl_name       = FS_DQ_FREE,
 2091                 .procname       = "free_dquots",
 2092                 .data           = &dqstats.free_dquots,
 2093                 .maxlen         = sizeof(int),
 2094                 .mode           = 0444,
 2095                 .proc_handler   = &proc_dointvec,
 2096         },
 2097         {
 2098                 .ctl_name       = FS_DQ_SYNCS,
 2099                 .procname       = "syncs",
 2100                 .data           = &dqstats.syncs,
 2101                 .maxlen         = sizeof(int),
 2102                 .mode           = 0444,
 2103                 .proc_handler   = &proc_dointvec,
 2104         },
 2105 #ifdef CONFIG_PRINT_QUOTA_WARNING
 2106         {
 2107                 .ctl_name       = FS_DQ_WARNINGS,
 2108                 .procname       = "warnings",
 2109                 .data           = &flag_print_warnings,
 2110                 .maxlen         = sizeof(int),
 2111                 .mode           = 0644,
 2112                 .proc_handler   = &proc_dointvec,
 2113         },
 2114 #endif
 2115         { .ctl_name = 0 },
 2116 };
 2117 
 2118 static ctl_table fs_table[] = {
 2119         {
 2120                 .ctl_name       = FS_DQSTATS,
 2121                 .procname       = "quota",
 2122                 .mode           = 0555,
 2123                 .child          = fs_dqstats_table,
 2124         },
 2125         { .ctl_name = 0 },
 2126 };
 2127 
 2128 static ctl_table sys_table[] = {
 2129         {
 2130                 .ctl_name       = CTL_FS,
 2131                 .procname       = "fs",
 2132                 .mode           = 0555,
 2133                 .child          = fs_table,
 2134         },
 2135         { .ctl_name = 0 },
 2136 };
 2137 
 2138 static int __init dquot_init(void)
 2139 {
 2140         int i;
 2141         unsigned long nr_hash, order;
 2142 
 2143         printk(KERN_NOTICE "VFS: Disk quotas %s\n", __DQUOT_VERSION__);
 2144 
 2145         register_sysctl_table(sys_table);
 2146 
 2147         dquot_cachep = kmem_cache_create("dquot",
 2148                         sizeof(struct dquot), sizeof(unsigned long) * 4,
 2149                         (SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT|
 2150                                 SLAB_MEM_SPREAD|SLAB_PANIC),
 2151                         NULL);
 2152 
 2153         order = 0;
 2154         dquot_hash = (struct hlist_head *)__get_free_pages(GFP_ATOMIC, order);
 2155         if (!dquot_hash)
 2156                 panic("Cannot create dquot hash table");
 2157 
 2158         /* Find power-of-two hlist_heads which can fit into allocation */
 2159         nr_hash = (1UL << order) * PAGE_SIZE / sizeof(struct hlist_head);
 2160         dq_hash_bits = 0;
 2161         do {
 2162                 dq_hash_bits++;
 2163         } while (nr_hash >> dq_hash_bits);
 2164         dq_hash_bits--;
 2165 
 2166         nr_hash = 1UL << dq_hash_bits;
 2167         dq_hash_mask = nr_hash - 1;
 2168         for (i = 0; i < nr_hash; i++)
 2169                 INIT_HLIST_HEAD(dquot_hash + i);
 2170 
 2171         printk("Dquot-cache hash table entries: %ld (order %ld, %ld bytes)\n",
 2172                         nr_hash, order, (PAGE_SIZE << order));
 2173 
 2174         register_shrinker(&dqcache_shrinker);
 2175 
 2176 #ifdef CONFIG_QUOTA_NETLINK_INTERFACE
 2177         if (genl_register_family(&quota_genl_family) != 0)
 2178                 printk(KERN_ERR "VFS: Failed to create quota netlink interface.\n");
 2179 #endif
 2180 
 2181         return 0;
 2182 }
 2183 module_init(dquot_init);
 2184 
 2185 EXPORT_SYMBOL(register_quota_format);
 2186 EXPORT_SYMBOL(unregister_quota_format);
 2187 EXPORT_SYMBOL(dqstats);
 2188 EXPORT_SYMBOL(dq_data_lock);
 2189 EXPORT_SYMBOL(vfs_quota_on);
 2190 EXPORT_SYMBOL(vfs_quota_on_path);
 2191 EXPORT_SYMBOL(vfs_quota_on_mount);
 2192 EXPORT_SYMBOL(vfs_quota_off);
 2193 EXPORT_SYMBOL(vfs_quota_sync);
 2194 EXPORT_SYMBOL(vfs_get_dqinfo);
 2195 EXPORT_SYMBOL(vfs_set_dqinfo);
 2196 EXPORT_SYMBOL(vfs_get_dqblk);
 2197 EXPORT_SYMBOL(vfs_set_dqblk);
 2198 EXPORT_SYMBOL(dquot_commit);
 2199 EXPORT_SYMBOL(dquot_commit_info);
 2200 EXPORT_SYMBOL(dquot_acquire);
 2201 EXPORT_SYMBOL(dquot_release);
 2202 EXPORT_SYMBOL(dquot_mark_dquot_dirty);
 2203 EXPORT_SYMBOL(dquot_initialize);
 2204 EXPORT_SYMBOL(dquot_drop);
 2205 EXPORT_SYMBOL(vfs_dq_drop);
 2206 EXPORT_SYMBOL(dquot_alloc_space);
 2207 EXPORT_SYMBOL(dquot_alloc_inode);
 2208 EXPORT_SYMBOL(dquot_free_space);
 2209 EXPORT_SYMBOL(dquot_free_inode);
 2210 EXPORT_SYMBOL(dquot_transfer);
 2211 EXPORT_SYMBOL(vfs_dq_transfer);
 2212 EXPORT_SYMBOL(vfs_dq_quota_on_remount);

Cache object: 5c0d92cf66819d45fe55fbf29e41f3f8


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.