aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r--fs/ext4/super.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 29c80f6d8b27..0f10ccd6bfc0 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1162,7 +1162,7 @@ static int ext4_release_dquot(struct dquot *dquot);
1162static int ext4_mark_dquot_dirty(struct dquot *dquot); 1162static int ext4_mark_dquot_dirty(struct dquot *dquot);
1163static int ext4_write_info(struct super_block *sb, int type); 1163static int ext4_write_info(struct super_block *sb, int type);
1164static int ext4_quota_on(struct super_block *sb, int type, int format_id, 1164static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1165 char *path); 1165 struct path *path);
1166static int ext4_quota_off(struct super_block *sb, int type); 1166static int ext4_quota_off(struct super_block *sb, int type);
1167static int ext4_quota_on_mount(struct super_block *sb, int type); 1167static int ext4_quota_on_mount(struct super_block *sb, int type);
1168static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data, 1168static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
@@ -4566,27 +4566,20 @@ static int ext4_quota_on_mount(struct super_block *sb, int type)
4566 * Standard function to be called on quota_on 4566 * Standard function to be called on quota_on
4567 */ 4567 */
4568static int ext4_quota_on(struct super_block *sb, int type, int format_id, 4568static int ext4_quota_on(struct super_block *sb, int type, int format_id,
4569 char *name) 4569 struct path *path)
4570{ 4570{
4571 int err; 4571 int err;
4572 struct path path;
4573 4572
4574 if (!test_opt(sb, QUOTA)) 4573 if (!test_opt(sb, QUOTA))
4575 return -EINVAL; 4574 return -EINVAL;
4576 4575
4577 err = kern_path(name, LOOKUP_FOLLOW, &path);
4578 if (err)
4579 return err;
4580
4581 /* Quotafile not on the same filesystem? */ 4576 /* Quotafile not on the same filesystem? */
4582 if (path.mnt->mnt_sb != sb) { 4577 if (path->mnt->mnt_sb != sb)
4583 path_put(&path);
4584 return -EXDEV; 4578 return -EXDEV;
4585 }
4586 /* Journaling quota? */ 4579 /* Journaling quota? */
4587 if (EXT4_SB(sb)->s_qf_names[type]) { 4580 if (EXT4_SB(sb)->s_qf_names[type]) {
4588 /* Quotafile not in fs root? */ 4581 /* Quotafile not in fs root? */
4589 if (path.dentry->d_parent != sb->s_root) 4582 if (path->dentry->d_parent != sb->s_root)
4590 ext4_msg(sb, KERN_WARNING, 4583 ext4_msg(sb, KERN_WARNING,
4591 "Quota file not on filesystem root. " 4584 "Quota file not on filesystem root. "
4592 "Journaled quota will not work"); 4585 "Journaled quota will not work");
@@ -4597,7 +4590,7 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
4597 * all updates to the file when we bypass pagecache... 4590 * all updates to the file when we bypass pagecache...
4598 */ 4591 */
4599 if (EXT4_SB(sb)->s_journal && 4592 if (EXT4_SB(sb)->s_journal &&
4600 ext4_should_journal_data(path.dentry->d_inode)) { 4593 ext4_should_journal_data(path->dentry->d_inode)) {
4601 /* 4594 /*
4602 * We don't need to lock updates but journal_flush() could 4595 * We don't need to lock updates but journal_flush() could
4603 * otherwise be livelocked... 4596 * otherwise be livelocked...
@@ -4605,15 +4598,11 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
4605 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); 4598 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);
4606 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal); 4599 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal);
4607 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 4600 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
4608 if (err) { 4601 if (err)
4609 path_put(&path);
4610 return err; 4602 return err;
4611 }
4612 } 4603 }
4613 4604
4614 err = dquot_quota_on_path(sb, type, format_id, &path); 4605 return dquot_quota_on(sb, type, format_id, path);
4615 path_put(&path);
4616 return err;
4617} 4606}
4618 4607
4619static int ext4_quota_off(struct super_block *sb, int type) 4608static int ext4_quota_off(struct super_block *sb, int type)