dquot: cleanup dquot initialize routine
Get rid of the initialize dquot operation - it is now always called from the filesystem and if a filesystem really needs it's own (which none currently does) it can just call into it's own routine directly. Rename the now static low-level dquot_initialize helper to __dquot_initialize and vfs_dq_init to dquot_initialize to have a consistent namespace. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
907f4554e2
commit
871a293155
|
@ -460,7 +460,6 @@ in sys_read() and friends.
|
|||
|
||||
--------------------------- dquot_operations -------------------------------
|
||||
prototypes:
|
||||
int (*initialize) (struct inode *, int);
|
||||
int (*write_dquot) (struct dquot *);
|
||||
int (*acquire_dquot) (struct dquot *);
|
||||
int (*release_dquot) (struct dquot *);
|
||||
|
@ -473,7 +472,6 @@ a proper locking wrt the filesystem and call the generic quota operations.
|
|||
What filesystem should expect from the generic quota functions:
|
||||
|
||||
FS recursion Held locks when called
|
||||
initialize: yes maybe dqonoff_sem
|
||||
write_dquot: yes dqonoff_sem or dqptr_sem
|
||||
acquire_dquot: yes dqonoff_sem or dqptr_sem
|
||||
release_dquot: yes dqonoff_sem or dqptr_sem
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include <linux/time.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/quotaops.h>
|
||||
#include "ext2.h"
|
||||
#include "xattr.h"
|
||||
#include "acl.h"
|
||||
|
|
|
@ -586,7 +586,7 @@ got:
|
|||
goto fail_drop;
|
||||
}
|
||||
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
err = dquot_alloc_inode(inode);
|
||||
if (err)
|
||||
goto fail_drop;
|
||||
|
|
|
@ -59,7 +59,7 @@ static inline int ext2_inode_is_fast_symlink(struct inode *inode)
|
|||
void ext2_delete_inode (struct inode * inode)
|
||||
{
|
||||
if (!is_bad_inode(inode))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
truncate_inode_pages(&inode->i_data, 0);
|
||||
|
||||
if (is_bad_inode(inode))
|
||||
|
@ -1461,7 +1461,7 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr)
|
|||
return error;
|
||||
|
||||
if (iattr->ia_valid & ATTR_SIZE)
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||
|
||||
(iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) {
|
||||
error = dquot_transfer(inode, iattr);
|
||||
|
|
|
@ -102,7 +102,7 @@ static int ext2_create (struct inode * dir, struct dentry * dentry, int mode, st
|
|||
{
|
||||
struct inode *inode;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode = ext2_new_inode(dir, mode);
|
||||
if (IS_ERR(inode))
|
||||
|
@ -131,7 +131,7 @@ static int ext2_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_
|
|||
if (!new_valid_dev(rdev))
|
||||
return -EINVAL;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode = ext2_new_inode (dir, mode);
|
||||
err = PTR_ERR(inode);
|
||||
|
@ -157,7 +157,7 @@ static int ext2_symlink (struct inode * dir, struct dentry * dentry,
|
|||
if (l > sb->s_blocksize)
|
||||
goto out;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode = ext2_new_inode (dir, S_IFLNK | S_IRWXUGO);
|
||||
err = PTR_ERR(inode);
|
||||
|
@ -202,7 +202,7 @@ static int ext2_link (struct dentry * old_dentry, struct inode * dir,
|
|||
if (inode->i_nlink >= EXT2_LINK_MAX)
|
||||
return -EMLINK;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode->i_ctime = CURRENT_TIME_SEC;
|
||||
inode_inc_link_count(inode);
|
||||
|
@ -226,7 +226,7 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode)
|
|||
if (dir->i_nlink >= EXT2_LINK_MAX)
|
||||
goto out;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode_inc_link_count(dir);
|
||||
|
||||
|
@ -274,7 +274,7 @@ static int ext2_unlink(struct inode * dir, struct dentry *dentry)
|
|||
struct page * page;
|
||||
int err = -ENOENT;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
de = ext2_find_entry (dir, &dentry->d_name, &page);
|
||||
if (!de)
|
||||
|
@ -318,8 +318,8 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry,
|
|||
struct ext2_dir_entry_2 * old_de;
|
||||
int err = -ENOENT;
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
old_de = ext2_find_entry (old_dir, &old_dentry->d_name, &old_page);
|
||||
if (!old_de)
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/time.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/jbd.h>
|
||||
#include <linux/quotaops.h>
|
||||
#include <linux/ext3_fs.h>
|
||||
#include <linux/ext3_jbd.h>
|
||||
#include "xattr.h"
|
||||
|
|
|
@ -123,7 +123,7 @@ void ext3_free_inode (handle_t *handle, struct inode * inode)
|
|||
* Note: we must free any quota before locking the superblock,
|
||||
* as writing the quota to disk may need the lock as well.
|
||||
*/
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
ext3_xattr_delete_inode(handle, inode);
|
||||
dquot_free_inode(inode);
|
||||
dquot_drop(inode);
|
||||
|
@ -588,7 +588,7 @@ got:
|
|||
sizeof(struct ext3_inode) - EXT3_GOOD_OLD_INODE_SIZE : 0;
|
||||
|
||||
ret = inode;
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
err = dquot_alloc_inode(inode);
|
||||
if (err)
|
||||
goto fail_drop;
|
||||
|
|
|
@ -197,7 +197,7 @@ void ext3_delete_inode (struct inode * inode)
|
|||
handle_t *handle;
|
||||
|
||||
if (!is_bad_inode(inode))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
truncate_inode_pages(&inode->i_data, 0);
|
||||
|
||||
|
@ -3152,7 +3152,7 @@ int ext3_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
return error;
|
||||
|
||||
if (ia_valid & ATTR_SIZE)
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
|
||||
(ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) {
|
||||
handle_t *handle;
|
||||
|
@ -3250,7 +3250,7 @@ static int ext3_writepage_trans_blocks(struct inode *inode)
|
|||
ret = 2 * (bpp + indirects) + 2;
|
||||
|
||||
#ifdef CONFIG_QUOTA
|
||||
/* We know that structure was already allocated during vfs_dq_init so
|
||||
/* We know that structure was already allocated during dquot_initialize so
|
||||
* we will be updating only the data blocks + inodes */
|
||||
ret += EXT3_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb);
|
||||
#endif
|
||||
|
|
|
@ -1696,7 +1696,7 @@ static int ext3_create (struct inode * dir, struct dentry * dentry, int mode,
|
|||
struct inode * inode;
|
||||
int err, retries = 0;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -1732,7 +1732,7 @@ static int ext3_mknod (struct inode * dir, struct dentry *dentry,
|
|||
if (!new_valid_dev(rdev))
|
||||
return -EINVAL;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -1770,7 +1770,7 @@ static int ext3_mkdir(struct inode * dir, struct dentry * dentry, int mode)
|
|||
if (dir->i_nlink >= EXT3_LINK_MAX)
|
||||
return -EMLINK;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -2066,8 +2066,8 @@ static int ext3_rmdir (struct inode * dir, struct dentry *dentry)
|
|||
|
||||
/* Initialize quotas before so that eventual writes go in
|
||||
* separate transaction */
|
||||
vfs_dq_init(dir);
|
||||
vfs_dq_init(dentry->d_inode);
|
||||
dquot_initialize(dir);
|
||||
dquot_initialize(dentry->d_inode);
|
||||
|
||||
handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb));
|
||||
if (IS_ERR(handle))
|
||||
|
@ -2127,8 +2127,8 @@ static int ext3_unlink(struct inode * dir, struct dentry *dentry)
|
|||
|
||||
/* Initialize quotas before so that eventual writes go
|
||||
* in separate transaction */
|
||||
vfs_dq_init(dir);
|
||||
vfs_dq_init(dentry->d_inode);
|
||||
dquot_initialize(dir);
|
||||
dquot_initialize(dentry->d_inode);
|
||||
|
||||
handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb));
|
||||
if (IS_ERR(handle))
|
||||
|
@ -2184,7 +2184,7 @@ static int ext3_symlink (struct inode * dir,
|
|||
if (l > dir->i_sb->s_blocksize)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -2241,7 +2241,7 @@ static int ext3_link (struct dentry * old_dentry,
|
|||
if (inode->i_nlink >= EXT3_LINK_MAX)
|
||||
return -EMLINK;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
/*
|
||||
* Return -ENOENT if we've raced with unlink and i_nlink is 0. Doing
|
||||
|
@ -2293,15 +2293,15 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
|
|||
struct ext3_dir_entry_2 * old_de, * new_de;
|
||||
int retval, flush_file = 0;
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
old_bh = new_bh = dir_bh = NULL;
|
||||
|
||||
/* Initialize quotas before so that eventual writes go
|
||||
* in separate transaction */
|
||||
if (new_dentry->d_inode)
|
||||
vfs_dq_init(new_dentry->d_inode);
|
||||
dquot_initialize(new_dentry->d_inode);
|
||||
handle = ext3_journal_start(old_dir, 2 *
|
||||
EXT3_DATA_TRANS_BLOCKS(old_dir->i_sb) +
|
||||
EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2);
|
||||
|
|
|
@ -752,7 +752,6 @@ static ssize_t ext3_quota_write(struct super_block *sb, int type,
|
|||
const char *data, size_t len, loff_t off);
|
||||
|
||||
static const struct dquot_operations ext3_quota_operations = {
|
||||
.initialize = dquot_initialize,
|
||||
.write_dquot = ext3_write_dquot,
|
||||
.acquire_dquot = ext3_acquire_dquot,
|
||||
.release_dquot = ext3_release_dquot,
|
||||
|
@ -1480,7 +1479,7 @@ static void ext3_orphan_cleanup (struct super_block * sb,
|
|||
}
|
||||
|
||||
list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
if (inode->i_nlink) {
|
||||
printk(KERN_DEBUG
|
||||
"%s: truncating inode %lu to %Ld bytes\n",
|
||||
|
@ -2736,7 +2735,7 @@ static int ext3_statfs (struct dentry * dentry, struct kstatfs * buf)
|
|||
* Process 1 Process 2
|
||||
* ext3_create() quota_sync()
|
||||
* journal_start() write_dquot()
|
||||
* vfs_dq_init() down(dqio_mutex)
|
||||
* dquot_initialize() down(dqio_mutex)
|
||||
* down(dqio_mutex) journal_start()
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <linux/jbd2.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/path.h>
|
||||
#include <linux/quotaops.h>
|
||||
#include "ext4.h"
|
||||
#include "ext4_jbd2.h"
|
||||
#include "xattr.h"
|
||||
|
|
|
@ -217,7 +217,7 @@ void ext4_free_inode(handle_t *handle, struct inode *inode)
|
|||
* Note: we must free any quota before locking the superblock,
|
||||
* as writing the quota to disk may need the lock as well.
|
||||
*/
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
ext4_xattr_delete_inode(handle, inode);
|
||||
dquot_free_inode(inode);
|
||||
dquot_drop(inode);
|
||||
|
@ -1034,7 +1034,7 @@ got:
|
|||
ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize;
|
||||
|
||||
ret = inode;
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
err = dquot_alloc_inode(inode);
|
||||
if (err)
|
||||
goto fail_drop;
|
||||
|
|
|
@ -171,7 +171,7 @@ void ext4_delete_inode(struct inode *inode)
|
|||
int err;
|
||||
|
||||
if (!is_bad_inode(inode))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
if (ext4_should_order_data(inode))
|
||||
ext4_begin_ordered_truncate(inode, 0);
|
||||
|
@ -5255,7 +5255,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
return error;
|
||||
|
||||
if (ia_valid & ATTR_SIZE)
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
|
||||
(ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) {
|
||||
handle_t *handle;
|
||||
|
|
|
@ -1766,7 +1766,7 @@ static int ext4_create(struct inode *dir, struct dentry *dentry, int mode,
|
|||
struct inode *inode;
|
||||
int err, retries = 0;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -1802,7 +1802,7 @@ static int ext4_mknod(struct inode *dir, struct dentry *dentry,
|
|||
if (!new_valid_dev(rdev))
|
||||
return -EINVAL;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -1841,7 +1841,7 @@ static int ext4_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
|||
if (EXT4_DIR_LINK_MAX(dir))
|
||||
return -EMLINK;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -2142,8 +2142,8 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
|
|||
|
||||
/* Initialize quotas before so that eventual writes go in
|
||||
* separate transaction */
|
||||
vfs_dq_init(dir);
|
||||
vfs_dq_init(dentry->d_inode);
|
||||
dquot_initialize(dir);
|
||||
dquot_initialize(dentry->d_inode);
|
||||
|
||||
handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb));
|
||||
if (IS_ERR(handle))
|
||||
|
@ -2203,8 +2203,8 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry)
|
|||
|
||||
/* Initialize quotas before so that eventual writes go
|
||||
* in separate transaction */
|
||||
vfs_dq_init(dir);
|
||||
vfs_dq_init(dentry->d_inode);
|
||||
dquot_initialize(dir);
|
||||
dquot_initialize(dentry->d_inode);
|
||||
|
||||
handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb));
|
||||
if (IS_ERR(handle))
|
||||
|
@ -2260,7 +2260,7 @@ static int ext4_symlink(struct inode *dir,
|
|||
if (l > dir->i_sb->s_blocksize)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retry:
|
||||
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
|
||||
|
@ -2320,7 +2320,7 @@ static int ext4_link(struct dentry *old_dentry,
|
|||
if (inode->i_nlink >= EXT4_LINK_MAX)
|
||||
return -EMLINK;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
/*
|
||||
* Return -ENOENT if we've raced with unlink and i_nlink is 0. Doing
|
||||
|
@ -2372,15 +2372,15 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
struct ext4_dir_entry_2 *old_de, *new_de;
|
||||
int retval, force_da_alloc = 0;
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
old_bh = new_bh = dir_bh = NULL;
|
||||
|
||||
/* Initialize quotas before so that eventual writes go
|
||||
* in separate transaction */
|
||||
if (new_dentry->d_inode)
|
||||
vfs_dq_init(new_dentry->d_inode);
|
||||
dquot_initialize(new_dentry->d_inode);
|
||||
handle = ext4_journal_start(old_dir, 2 *
|
||||
EXT4_DATA_TRANS_BLOCKS(old_dir->i_sb) +
|
||||
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2);
|
||||
|
|
|
@ -1013,7 +1013,6 @@ static ssize_t ext4_quota_write(struct super_block *sb, int type,
|
|||
const char *data, size_t len, loff_t off);
|
||||
|
||||
static const struct dquot_operations ext4_quota_operations = {
|
||||
.initialize = dquot_initialize,
|
||||
#ifdef CONFIG_QUOTA
|
||||
.get_reserved_space = ext4_get_reserved_space,
|
||||
#endif
|
||||
|
@ -1931,7 +1930,7 @@ static void ext4_orphan_cleanup(struct super_block *sb,
|
|||
}
|
||||
|
||||
list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan);
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
if (inode->i_nlink) {
|
||||
ext4_msg(sb, KERN_DEBUG,
|
||||
"%s: truncating inode %lu to %lld bytes",
|
||||
|
@ -3700,7 +3699,7 @@ static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|||
* Process 1 Process 2
|
||||
* ext4_create() quota_sync()
|
||||
* jbd2_journal_start() write_dquot()
|
||||
* vfs_dq_init() down(dqio_mutex)
|
||||
* dquot_initialize() down(dqio_mutex)
|
||||
* down(dqio_mutex) jbd2_journal_start()
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -99,7 +99,7 @@ int jfs_setattr(struct dentry *dentry, struct iattr *iattr)
|
|||
return rc;
|
||||
|
||||
if (iattr->ia_valid & ATTR_SIZE)
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||
|
||||
(iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) {
|
||||
rc = dquot_transfer(inode, iattr);
|
||||
|
|
|
@ -147,7 +147,7 @@ void jfs_delete_inode(struct inode *inode)
|
|||
jfs_info("In jfs_delete_inode, inode = 0x%p", inode);
|
||||
|
||||
if (!is_bad_inode(inode))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
if (!is_bad_inode(inode) &&
|
||||
(JFS_IP(inode)->fileset == FILESYSTEM_I)) {
|
||||
|
@ -161,7 +161,7 @@ void jfs_delete_inode(struct inode *inode)
|
|||
/*
|
||||
* Free the inode from the quota allocation.
|
||||
*/
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
dquot_free_inode(inode);
|
||||
dquot_drop(inode);
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ struct inode *ialloc(struct inode *parent, umode_t mode)
|
|||
/*
|
||||
* Allocate inode to quota.
|
||||
*/
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
rc = dquot_alloc_inode(inode);
|
||||
if (rc)
|
||||
goto fail_drop;
|
||||
|
|
|
@ -85,7 +85,7 @@ static int jfs_create(struct inode *dip, struct dentry *dentry, int mode,
|
|||
|
||||
jfs_info("jfs_create: dip:0x%p name:%s", dip, dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(dip);
|
||||
dquot_initialize(dip);
|
||||
|
||||
/*
|
||||
* search parent directory for entry/freespace
|
||||
|
@ -217,7 +217,7 @@ static int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode)
|
|||
|
||||
jfs_info("jfs_mkdir: dip:0x%p name:%s", dip, dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(dip);
|
||||
dquot_initialize(dip);
|
||||
|
||||
/* link count overflow on parent directory ? */
|
||||
if (dip->i_nlink == JFS_LINK_MAX) {
|
||||
|
@ -360,8 +360,8 @@ static int jfs_rmdir(struct inode *dip, struct dentry *dentry)
|
|||
jfs_info("jfs_rmdir: dip:0x%p name:%s", dip, dentry->d_name.name);
|
||||
|
||||
/* Init inode for quota operations. */
|
||||
vfs_dq_init(dip);
|
||||
vfs_dq_init(ip);
|
||||
dquot_initialize(dip);
|
||||
dquot_initialize(ip);
|
||||
|
||||
/* directory must be empty to be removed */
|
||||
if (!dtEmpty(ip)) {
|
||||
|
@ -488,8 +488,8 @@ static int jfs_unlink(struct inode *dip, struct dentry *dentry)
|
|||
jfs_info("jfs_unlink: dip:0x%p name:%s", dip, dentry->d_name.name);
|
||||
|
||||
/* Init inode for quota operations. */
|
||||
vfs_dq_init(dip);
|
||||
vfs_dq_init(ip);
|
||||
dquot_initialize(dip);
|
||||
dquot_initialize(ip);
|
||||
|
||||
if ((rc = get_UCSname(&dname, dentry)))
|
||||
goto out;
|
||||
|
@ -811,7 +811,7 @@ static int jfs_link(struct dentry *old_dentry,
|
|||
if (ip->i_nlink == 0)
|
||||
return -ENOENT;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
tid = txBegin(ip->i_sb, 0);
|
||||
|
||||
|
@ -904,7 +904,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry,
|
|||
|
||||
jfs_info("jfs_symlink: dip:0x%p name:%s", dip, name);
|
||||
|
||||
vfs_dq_init(dip);
|
||||
dquot_initialize(dip);
|
||||
|
||||
ssize = strlen(name) + 1;
|
||||
|
||||
|
@ -1097,8 +1097,8 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
jfs_info("jfs_rename: %s %s", old_dentry->d_name.name,
|
||||
new_dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
old_ip = old_dentry->d_inode;
|
||||
new_ip = new_dentry->d_inode;
|
||||
|
@ -1149,7 +1149,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
} else if (new_ip) {
|
||||
IWRITE_LOCK(new_ip, RDWRLOCK_NORMAL);
|
||||
/* Init inode for quota operations. */
|
||||
vfs_dq_init(new_ip);
|
||||
dquot_initialize(new_ip);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1373,7 +1373,7 @@ static int jfs_mknod(struct inode *dir, struct dentry *dentry,
|
|||
|
||||
jfs_info("jfs_mknod: %s", dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
if ((rc = get_UCSname(&dname, dentry)))
|
||||
goto out;
|
||||
|
|
|
@ -108,7 +108,7 @@ static int ocfs2_file_open(struct inode *inode, struct file *file)
|
|||
file->f_path.dentry->d_name.len, file->f_path.dentry->d_name.name);
|
||||
|
||||
if (file->f_mode & FMODE_WRITE)
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
spin_lock(&oi->ip_lock);
|
||||
|
||||
|
@ -980,7 +980,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
|
||||
size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE;
|
||||
if (size_change) {
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
status = ocfs2_rw_lock(inode, 1);
|
||||
if (status < 0) {
|
||||
|
|
|
@ -971,7 +971,7 @@ void ocfs2_delete_inode(struct inode *inode)
|
|||
goto bail;
|
||||
}
|
||||
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
if (!ocfs2_inode_is_valid_to_delete(inode)) {
|
||||
/* It's probably not necessary to truncate_inode_pages
|
||||
|
|
|
@ -212,7 +212,7 @@ static struct inode *ocfs2_get_init_inode(struct inode *dir, int mode)
|
|||
} else
|
||||
inode->i_gid = current_fsgid();
|
||||
inode->i_mode = mode;
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
return inode;
|
||||
}
|
||||
|
||||
|
@ -244,7 +244,7 @@ static int ocfs2_mknod(struct inode *dir,
|
|||
(unsigned long)dev, dentry->d_name.len,
|
||||
dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
/* get our super block */
|
||||
osb = OCFS2_SB(dir->i_sb);
|
||||
|
@ -634,7 +634,7 @@ static int ocfs2_link(struct dentry *old_dentry,
|
|||
if (S_ISDIR(inode->i_mode))
|
||||
return -EPERM;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
err = ocfs2_inode_lock_nested(dir, &parent_fe_bh, 1, OI_LS_PARENT);
|
||||
if (err < 0) {
|
||||
|
@ -791,7 +791,7 @@ static int ocfs2_unlink(struct inode *dir,
|
|||
mlog_entry("(0x%p, 0x%p, '%.*s')\n", dir, dentry,
|
||||
dentry->d_name.len, dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
BUG_ON(dentry->d_parent->d_inode != dir);
|
||||
|
||||
|
@ -1053,8 +1053,8 @@ static int ocfs2_rename(struct inode *old_dir,
|
|||
old_dentry->d_name.len, old_dentry->d_name.name,
|
||||
new_dentry->d_name.len, new_dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
osb = OCFS2_SB(old_dir->i_sb);
|
||||
|
||||
|
@ -1604,7 +1604,7 @@ static int ocfs2_symlink(struct inode *dir,
|
|||
mlog_entry("(0x%p, 0x%p, symname='%s' actual='%.*s')\n", dir,
|
||||
dentry, symname, dentry->d_name.len, dentry->d_name.name);
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
sb = dir->i_sb;
|
||||
osb = OCFS2_SB(sb);
|
||||
|
|
|
@ -851,7 +851,6 @@ static void ocfs2_destroy_dquot(struct dquot *dquot)
|
|||
}
|
||||
|
||||
const struct dquot_operations ocfs2_quota_operations = {
|
||||
.initialize = dquot_initialize,
|
||||
.write_dquot = ocfs2_write_dquot,
|
||||
.acquire_dquot = ocfs2_acquire_dquot,
|
||||
.release_dquot = ocfs2_release_dquot,
|
||||
|
|
|
@ -4390,7 +4390,7 @@ static int ocfs2_vfs_reflink(struct dentry *old_dentry, struct inode *dir,
|
|||
}
|
||||
|
||||
mutex_lock(&inode->i_mutex);
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
error = ocfs2_reflink(old_dentry, dir, new_dentry, preserve);
|
||||
mutex_unlock(&inode->i_mutex);
|
||||
if (!error)
|
||||
|
|
|
@ -230,6 +230,7 @@ struct dqstats dqstats;
|
|||
EXPORT_SYMBOL(dqstats);
|
||||
|
||||
static qsize_t inode_get_rsv_space(struct inode *inode);
|
||||
static void __dquot_initialize(struct inode *inode, int type);
|
||||
|
||||
static inline unsigned int
|
||||
hashfn(const struct super_block *sb, unsigned int id, int type)
|
||||
|
@ -890,7 +891,7 @@ static void add_dquot_ref(struct super_block *sb, int type)
|
|||
spin_unlock(&inode_lock);
|
||||
|
||||
iput(old_inode);
|
||||
sb->dq_op->initialize(inode, type);
|
||||
__dquot_initialize(inode, type);
|
||||
/* We hold a reference to 'inode' so it couldn't have been
|
||||
* removed from s_inodes list while we dropped the inode_lock.
|
||||
* We cannot iput the inode now as we can be holding the last
|
||||
|
@ -1293,22 +1294,26 @@ static int info_bdq_free(struct dquot *dquot, qsize_t space)
|
|||
}
|
||||
|
||||
/*
|
||||
* Initialize quota pointers in inode
|
||||
* We do things in a bit complicated way but by that we avoid calling
|
||||
* dqget() and thus filesystem callbacks under dqptr_sem.
|
||||
* Initialize quota pointers in inode
|
||||
*
|
||||
* We do things in a bit complicated way but by that we avoid calling
|
||||
* dqget() and thus filesystem callbacks under dqptr_sem.
|
||||
*
|
||||
* It is better to call this function outside of any transaction as it
|
||||
* might need a lot of space in journal for dquot structure allocation.
|
||||
*/
|
||||
int dquot_initialize(struct inode *inode, int type)
|
||||
static void __dquot_initialize(struct inode *inode, int type)
|
||||
{
|
||||
unsigned int id = 0;
|
||||
int cnt, ret = 0;
|
||||
int cnt;
|
||||
struct dquot *got[MAXQUOTAS];
|
||||
struct super_block *sb = inode->i_sb;
|
||||
qsize_t rsv;
|
||||
|
||||
/* First test before acquiring mutex - solves deadlocks when we
|
||||
* re-enter the quota code and are already holding the mutex */
|
||||
if (IS_NOQUOTA(inode))
|
||||
return 0;
|
||||
if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode))
|
||||
return;
|
||||
|
||||
/* First get references to structures we might need. */
|
||||
for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
|
||||
|
@ -1351,7 +1356,11 @@ out_err:
|
|||
up_write(&sb_dqopt(sb)->dqptr_sem);
|
||||
/* Drop unused references */
|
||||
dqput_all(got);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void dquot_initialize(struct inode *inode)
|
||||
{
|
||||
__dquot_initialize(inode, -1);
|
||||
}
|
||||
EXPORT_SYMBOL(dquot_initialize);
|
||||
|
||||
|
@ -1783,7 +1792,7 @@ int dquot_transfer(struct inode *inode, struct iattr *iattr)
|
|||
chid[GRPQUOTA] = iattr->ia_gid;
|
||||
}
|
||||
if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode)) {
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
if (__dquot_transfer(inode, chid, mask) == NO_QUOTA)
|
||||
return -EDQUOT;
|
||||
}
|
||||
|
@ -1810,7 +1819,6 @@ EXPORT_SYMBOL(dquot_commit_info);
|
|||
* Definitions of diskquota operations.
|
||||
*/
|
||||
const struct dquot_operations dquot_operations = {
|
||||
.initialize = dquot_initialize,
|
||||
.write_dquot = dquot_commit,
|
||||
.acquire_dquot = dquot_acquire,
|
||||
.release_dquot = dquot_release,
|
||||
|
@ -1829,7 +1837,7 @@ int dquot_file_open(struct inode *inode, struct file *file)
|
|||
|
||||
error = generic_file_open(inode, file);
|
||||
if (!error && (file->f_mode & FMODE_WRITE))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
return error;
|
||||
}
|
||||
EXPORT_SYMBOL(dquot_file_open);
|
||||
|
|
|
@ -35,7 +35,7 @@ void reiserfs_delete_inode(struct inode *inode)
|
|||
int err;
|
||||
|
||||
if (!is_bad_inode(inode))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
truncate_inode_pages(&inode->i_data, 0);
|
||||
|
||||
|
@ -1768,7 +1768,7 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
|
|||
|
||||
BUG_ON(!th->t_trans_id);
|
||||
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
err = dquot_alloc_inode(inode);
|
||||
if (err)
|
||||
goto out_end_trans;
|
||||
|
@ -3076,7 +3076,7 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
|
||||
depth = reiserfs_write_lock_once(inode->i_sb);
|
||||
if (attr->ia_valid & ATTR_SIZE) {
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
/* version 2 items will be caught by the s_maxbytes check
|
||||
** done for us in vmtruncate
|
||||
|
|
|
@ -554,7 +554,7 @@ static int drop_new_inode(struct inode *inode)
|
|||
}
|
||||
|
||||
/* utility function that does setup for reiserfs_new_inode.
|
||||
** vfs_dq_init needs lots of credits so it's better to have it
|
||||
** dquot_initialize needs lots of credits so it's better to have it
|
||||
** outside of a transaction, so we had to pull some bits of
|
||||
** reiserfs_new_inode out into this func.
|
||||
*/
|
||||
|
@ -577,7 +577,7 @@ static int new_inode_init(struct inode *inode, struct inode *dir, int mode)
|
|||
} else {
|
||||
inode->i_gid = current_fsgid();
|
||||
}
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -594,7 +594,7 @@ static int reiserfs_create(struct inode *dir, struct dentry *dentry, int mode,
|
|||
struct reiserfs_transaction_handle th;
|
||||
struct reiserfs_security_handle security;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
if (!(inode = new_inode(dir->i_sb))) {
|
||||
return -ENOMEM;
|
||||
|
@ -668,7 +668,7 @@ static int reiserfs_mknod(struct inode *dir, struct dentry *dentry, int mode,
|
|||
if (!new_valid_dev(rdev))
|
||||
return -EINVAL;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
if (!(inode = new_inode(dir->i_sb))) {
|
||||
return -ENOMEM;
|
||||
|
@ -743,7 +743,7 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
|||
2 * (REISERFS_QUOTA_INIT_BLOCKS(dir->i_sb) +
|
||||
REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb));
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
#ifdef DISPLACE_NEW_PACKING_LOCALITIES
|
||||
/* set flag that new packing locality created and new blocks for the content * of that directory are not displaced yet */
|
||||
|
@ -848,7 +848,7 @@ static int reiserfs_rmdir(struct inode *dir, struct dentry *dentry)
|
|||
JOURNAL_PER_BALANCE_CNT * 2 + 2 +
|
||||
4 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb);
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
reiserfs_write_lock(dir->i_sb);
|
||||
retval = journal_begin(&th, dir->i_sb, jbegin_count);
|
||||
|
@ -931,7 +931,7 @@ static int reiserfs_unlink(struct inode *dir, struct dentry *dentry)
|
|||
unsigned long savelink;
|
||||
int depth;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode = dentry->d_inode;
|
||||
|
||||
|
@ -1034,7 +1034,7 @@ static int reiserfs_symlink(struct inode *parent_dir,
|
|||
2 * (REISERFS_QUOTA_INIT_BLOCKS(parent_dir->i_sb) +
|
||||
REISERFS_QUOTA_TRANS_BLOCKS(parent_dir->i_sb));
|
||||
|
||||
vfs_dq_init(parent_dir);
|
||||
dquot_initialize(parent_dir);
|
||||
|
||||
if (!(inode = new_inode(parent_dir->i_sb))) {
|
||||
return -ENOMEM;
|
||||
|
@ -1123,7 +1123,7 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir,
|
|||
JOURNAL_PER_BALANCE_CNT * 3 +
|
||||
2 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb);
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
reiserfs_write_lock(dir->i_sb);
|
||||
if (inode->i_nlink >= REISERFS_LINK_MAX) {
|
||||
|
@ -1249,8 +1249,8 @@ static int reiserfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
JOURNAL_PER_BALANCE_CNT * 3 + 5 +
|
||||
4 * REISERFS_QUOTA_TRANS_BLOCKS(old_dir->i_sb);
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
old_inode = old_dentry->d_inode;
|
||||
new_dentry_inode = new_dentry->d_inode;
|
||||
|
|
|
@ -246,7 +246,7 @@ static int finish_unfinished(struct super_block *s)
|
|||
retval = remove_save_link_only(s, &save_link_key, 0);
|
||||
continue;
|
||||
}
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
if (truncate && S_ISDIR(inode->i_mode)) {
|
||||
/* We got a truncate request for a dir which is impossible.
|
||||
|
@ -622,7 +622,6 @@ static int reiserfs_write_info(struct super_block *, int);
|
|||
static int reiserfs_quota_on(struct super_block *, int, int, char *, int);
|
||||
|
||||
static const struct dquot_operations reiserfs_quota_operations = {
|
||||
.initialize = dquot_initialize,
|
||||
.write_dquot = reiserfs_write_dquot,
|
||||
.acquire_dquot = reiserfs_acquire_dquot,
|
||||
.release_dquot = reiserfs_release_dquot,
|
||||
|
|
|
@ -228,7 +228,7 @@ static int udf_setattr(struct dentry *dentry, struct iattr *iattr)
|
|||
return error;
|
||||
|
||||
if (iattr->ia_valid & ATTR_SIZE)
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||
|
||||
(iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) {
|
||||
|
|
|
@ -153,7 +153,7 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err)
|
|||
insert_inode_hash(inode);
|
||||
mark_inode_dirty(inode);
|
||||
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
ret = dquot_alloc_inode(inode);
|
||||
if (ret) {
|
||||
dquot_drop(inode);
|
||||
|
|
|
@ -72,7 +72,7 @@ static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int);
|
|||
void udf_delete_inode(struct inode *inode)
|
||||
{
|
||||
if (!is_bad_inode(inode))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
truncate_inode_pages(&inode->i_data, 0);
|
||||
|
||||
|
|
|
@ -563,7 +563,7 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode,
|
|||
int err;
|
||||
struct udf_inode_info *iinfo;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
lock_kernel();
|
||||
inode = udf_new_inode(dir, mode, &err);
|
||||
|
@ -618,7 +618,7 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode,
|
|||
if (!old_valid_dev(rdev))
|
||||
return -EINVAL;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
lock_kernel();
|
||||
err = -EIO;
|
||||
|
@ -666,7 +666,7 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode)
|
|||
struct udf_inode_info *dinfo = UDF_I(dir);
|
||||
struct udf_inode_info *iinfo;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
lock_kernel();
|
||||
err = -EMLINK;
|
||||
|
@ -805,7 +805,7 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry)
|
|||
struct fileIdentDesc *fi, cfi;
|
||||
struct kernel_lb_addr tloc;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retval = -ENOENT;
|
||||
lock_kernel();
|
||||
|
@ -853,7 +853,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry)
|
|||
struct fileIdentDesc cfi;
|
||||
struct kernel_lb_addr tloc;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
retval = -ENOENT;
|
||||
lock_kernel();
|
||||
|
@ -909,7 +909,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry,
|
|||
struct buffer_head *bh;
|
||||
struct udf_inode_info *iinfo;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
lock_kernel();
|
||||
inode = udf_new_inode(dir, S_IFLNK, &err);
|
||||
|
@ -1081,7 +1081,7 @@ static int udf_link(struct dentry *old_dentry, struct inode *dir,
|
|||
int err;
|
||||
struct buffer_head *bh;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
lock_kernel();
|
||||
if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) {
|
||||
|
@ -1145,8 +1145,8 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
struct kernel_lb_addr tloc;
|
||||
struct udf_inode_info *old_iinfo = UDF_I(old_inode);
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
lock_kernel();
|
||||
ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi);
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/quotaops.h>
|
||||
|
||||
#include "ufs_fs.h"
|
||||
#include "ufs.h"
|
||||
|
|
|
@ -355,7 +355,7 @@ cg_found:
|
|||
|
||||
unlock_super (sb);
|
||||
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
err = dquot_alloc_inode(inode);
|
||||
if (err) {
|
||||
dquot_drop(inode);
|
||||
|
|
|
@ -910,7 +910,7 @@ void ufs_delete_inode (struct inode * inode)
|
|||
loff_t old_i_size;
|
||||
|
||||
if (!is_bad_inode(inode))
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
truncate_inode_pages(&inode->i_data, 0);
|
||||
if (is_bad_inode(inode))
|
||||
|
|
|
@ -86,7 +86,7 @@ static int ufs_create (struct inode * dir, struct dentry * dentry, int mode,
|
|||
|
||||
UFSD("BEGIN\n");
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode = ufs_new_inode(dir, mode);
|
||||
err = PTR_ERR(inode);
|
||||
|
@ -112,7 +112,7 @@ static int ufs_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_t
|
|||
if (!old_valid_dev(rdev))
|
||||
return -EINVAL;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode = ufs_new_inode(dir, mode);
|
||||
err = PTR_ERR(inode);
|
||||
|
@ -138,7 +138,7 @@ static int ufs_symlink (struct inode * dir, struct dentry * dentry,
|
|||
if (l > sb->s_blocksize)
|
||||
goto out_notlocked;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
lock_kernel();
|
||||
inode = ufs_new_inode(dir, S_IFLNK | S_IRWXUGO);
|
||||
|
@ -185,7 +185,7 @@ static int ufs_link (struct dentry * old_dentry, struct inode * dir,
|
|||
return -EMLINK;
|
||||
}
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
inode->i_ctime = CURRENT_TIME_SEC;
|
||||
inode_inc_link_count(inode);
|
||||
|
@ -204,7 +204,7 @@ static int ufs_mkdir(struct inode * dir, struct dentry * dentry, int mode)
|
|||
if (dir->i_nlink >= UFS_LINK_MAX)
|
||||
goto out;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
lock_kernel();
|
||||
inode_inc_link_count(dir);
|
||||
|
@ -250,7 +250,7 @@ static int ufs_unlink(struct inode *dir, struct dentry *dentry)
|
|||
struct page *page;
|
||||
int err = -ENOENT;
|
||||
|
||||
vfs_dq_init(dir);
|
||||
dquot_initialize(dir);
|
||||
|
||||
de = ufs_find_entry(dir, &dentry->d_name, &page);
|
||||
if (!de)
|
||||
|
@ -296,8 +296,8 @@ static int ufs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||
struct ufs_dir_entry *old_de;
|
||||
int err = -ENOENT;
|
||||
|
||||
vfs_dq_init(old_dir);
|
||||
vfs_dq_init(new_dir);
|
||||
dquot_initialize(old_dir);
|
||||
dquot_initialize(new_dir);
|
||||
|
||||
old_de = ufs_find_entry(old_dir, &old_dentry->d_name, &old_page);
|
||||
if (!old_de)
|
||||
|
|
|
@ -528,7 +528,7 @@ static int ufs_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
attr->ia_size != i_size_read(inode)) {
|
||||
loff_t old_i_size = inode->i_size;
|
||||
|
||||
vfs_dq_init(inode);
|
||||
dquot_initialize(inode);
|
||||
|
||||
error = vmtruncate(inode, attr->ia_size);
|
||||
if (error)
|
||||
|
|
|
@ -295,7 +295,6 @@ struct quota_format_ops {
|
|||
|
||||
/* Operations working with dquots */
|
||||
struct dquot_operations {
|
||||
int (*initialize) (struct inode *, int);
|
||||
int (*write_dquot) (struct dquot *); /* Ordinary dquot write */
|
||||
struct dquot *(*alloc_dquot)(struct super_block *, int); /* Allocate memory for new dquot */
|
||||
void (*destroy_dquot)(struct dquot *); /* Free memory for dquot */
|
||||
|
|
|
@ -23,7 +23,7 @@ void inode_add_rsv_space(struct inode *inode, qsize_t number);
|
|||
void inode_claim_rsv_space(struct inode *inode, qsize_t number);
|
||||
void inode_sub_rsv_space(struct inode *inode, qsize_t number);
|
||||
|
||||
int dquot_initialize(struct inode *inode, int type);
|
||||
void dquot_initialize(struct inode *inode);
|
||||
void dquot_drop(struct inode *inode);
|
||||
struct dquot *dqget(struct super_block *sb, unsigned int id, int type);
|
||||
void dqput(struct dquot *dquot);
|
||||
|
@ -139,15 +139,6 @@ extern const struct quotactl_ops vfs_quotactl_ops;
|
|||
#define sb_dquot_ops (&dquot_operations)
|
||||
#define sb_quotactl_ops (&vfs_quotactl_ops)
|
||||
|
||||
/* It is better to call this function outside of any transaction as it might
|
||||
* need a lot of space in journal for dquot structure allocation. */
|
||||
static inline void vfs_dq_init(struct inode *inode)
|
||||
{
|
||||
BUG_ON(!inode->i_sb);
|
||||
if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode))
|
||||
inode->i_sb->dq_op->initialize(inode, -1);
|
||||
}
|
||||
|
||||
/* Cannot be called inside a transaction */
|
||||
static inline int vfs_dq_off(struct super_block *sb, int remount)
|
||||
{
|
||||
|
@ -207,7 +198,7 @@ static inline int sb_any_quota_active(struct super_block *sb)
|
|||
#define sb_dquot_ops (NULL)
|
||||
#define sb_quotactl_ops (NULL)
|
||||
|
||||
static inline void vfs_dq_init(struct inode *inode)
|
||||
static inline void dquot_initialize(struct inode *inode)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -260,6 +251,8 @@ static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define dquot_file_open generic_file_open
|
||||
|
||||
#endif /* CONFIG_QUOTA */
|
||||
|
||||
static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr)
|
||||
|
@ -344,6 +337,4 @@ static inline void dquot_release_reservation_block(struct inode *inode,
|
|||
__dquot_free_space(inode, nr << inode->i_blkbits, 1);
|
||||
}
|
||||
|
||||
#define dquot_file_open generic_file_open
|
||||
|
||||
#endif /* _LINUX_QUOTAOPS_ */
|
||||
|
|
Loading…
Reference in New Issue