diff options
Diffstat (limited to 'fs/ext4/super.c')
| -rw-r--r-- | fs/ext4/super.c | 25 | 
1 files changed, 7 insertions, 18 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 29c80f6d8b2..0f10ccd6bfc 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1162,7 +1162,7 @@ static int ext4_release_dquot(struct dquot *dquot);  static int ext4_mark_dquot_dirty(struct dquot *dquot);  static int ext4_write_info(struct super_block *sb, int type);  static int ext4_quota_on(struct super_block *sb, int type, int format_id, -				char *path); +			 struct path *path);  static int ext4_quota_off(struct super_block *sb, int type);  static int ext4_quota_on_mount(struct super_block *sb, int type);  static 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)   * Standard function to be called on quota_on   */  static int ext4_quota_on(struct super_block *sb, int type, int format_id, -			 char *name) +			 struct path *path)  {  	int err; -	struct path path;  	if (!test_opt(sb, QUOTA))  		return -EINVAL; -	err = kern_path(name, LOOKUP_FOLLOW, &path); -	if (err) -		return err; -  	/* Quotafile not on the same filesystem? */ -	if (path.mnt->mnt_sb != sb) { -		path_put(&path); +	if (path->mnt->mnt_sb != sb)  		return -EXDEV; -	}  	/* Journaling quota? */  	if (EXT4_SB(sb)->s_qf_names[type]) {  		/* Quotafile not in fs root? */ -		if (path.dentry->d_parent != sb->s_root) +		if (path->dentry->d_parent != sb->s_root)  			ext4_msg(sb, KERN_WARNING,  				"Quota file not on filesystem root. "  				"Journaled quota will not work"); @@ -4597,7 +4590,7 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,  	 * all updates to the file when we bypass pagecache...  	 */  	if (EXT4_SB(sb)->s_journal && -	    ext4_should_journal_data(path.dentry->d_inode)) { +	    ext4_should_journal_data(path->dentry->d_inode)) {  		/*  		 * We don't need to lock updates but journal_flush() could  		 * otherwise be livelocked... @@ -4605,15 +4598,11 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,  		jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);  		err = jbd2_journal_flush(EXT4_SB(sb)->s_journal);  		jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); -		if (err) { -			path_put(&path); +		if (err)  			return err; -		}  	} -	err = dquot_quota_on_path(sb, type, format_id, &path); -	path_put(&path); -	return err; +	return dquot_quota_on(sb, type, format_id, path);  }  static int ext4_quota_off(struct super_block *sb, int type)  |