Commit 29c079ca authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'fs_for_v5.2-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs

Pull misc filesystem updates from Jan Kara:
 "A couple of small bugfixes and cleanups for quota, udf, ext2, and
  reiserfs"

* tag 'fs_for_v5.2-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  quota: check time limit when back out space/inode change
  fs/quota: erase unused but set variable warning
  quota: fix wrong indentation
  udf: fix an uninitialized read bug and remove dead code
  fs/reiserfs/journal.c: Make remove_journal_hash static
  quota: remove trailing whitespaces
  quota: code cleanup for __dquot_alloc_space()
  ext2: Adjust the comment of function ext2_alloc_branch
  udf: Explain handling of load_nls() failure
parents a13f0655 632a9f3a
...@@ -451,7 +451,9 @@ static int ext2_alloc_blocks(struct inode *inode, ...@@ -451,7 +451,9 @@ static int ext2_alloc_blocks(struct inode *inode,
/** /**
* ext2_alloc_branch - allocate and set up a chain of blocks. * ext2_alloc_branch - allocate and set up a chain of blocks.
* @inode: owner * @inode: owner
* @num: depth of the chain (number of blocks to allocate) * @indirect_blks: depth of the chain (number of blocks to allocate)
* @blks: number of allocated direct blocks
* @goal: preferred place for allocation
* @offsets: offsets (in the blocks) to store the pointers to next. * @offsets: offsets (in the blocks) to store the pointers to next.
* @branch: place to store the chain in. * @branch: place to store the chain in.
* *
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* on the Melbourne quota system as used on BSD derived systems. The internal * on the Melbourne quota system as used on BSD derived systems. The internal
* implementation is based on one of the several variants of the LINUX * implementation is based on one of the several variants of the LINUX
* inode-subsystem with added complexity of the diskquota system. * inode-subsystem with added complexity of the diskquota system.
* *
* Author: Marco van Wieringen <mvw@planets.elm.net> * Author: Marco van Wieringen <mvw@planets.elm.net>
* *
* Fixes: Dmitry Gorodchanin <pgmdsg@ibi.com>, 11 Feb 96 * Fixes: Dmitry Gorodchanin <pgmdsg@ibi.com>, 11 Feb 96
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
* Added journalled quota support, fix lock inversion problems * Added journalled quota support, fix lock inversion problems
* Jan Kara, <jack@suse.cz>, 2003,2004 * Jan Kara, <jack@suse.cz>, 2003,2004
* *
* (C) Copyright 1994 - 1997 Marco van Wieringen * (C) Copyright 1994 - 1997 Marco van Wieringen
*/ */
#include <linux/errno.h> #include <linux/errno.h>
...@@ -197,7 +197,7 @@ static struct quota_format_type *find_quota_format(int id) ...@@ -197,7 +197,7 @@ static struct quota_format_type *find_quota_format(int id)
int qm; int qm;
spin_unlock(&dq_list_lock); spin_unlock(&dq_list_lock);
for (qm = 0; module_names[qm].qm_fmt_id && for (qm = 0; module_names[qm].qm_fmt_id &&
module_names[qm].qm_fmt_id != id; qm++) module_names[qm].qm_fmt_id != id; qm++)
; ;
...@@ -424,10 +424,11 @@ int dquot_acquire(struct dquot *dquot) ...@@ -424,10 +424,11 @@ int dquot_acquire(struct dquot *dquot)
struct quota_info *dqopt = sb_dqopt(dquot->dq_sb); struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
mutex_lock(&dquot->dq_lock); mutex_lock(&dquot->dq_lock);
if (!test_bit(DQ_READ_B, &dquot->dq_flags)) if (!test_bit(DQ_READ_B, &dquot->dq_flags)) {
ret = dqopt->ops[dquot->dq_id.type]->read_dqblk(dquot); ret = dqopt->ops[dquot->dq_id.type]->read_dqblk(dquot);
if (ret < 0) if (ret < 0)
goto out_iolock; goto out_iolock;
}
/* Make sure flags update is visible after dquot has been filled */ /* Make sure flags update is visible after dquot has been filled */
smp_mb__before_atomic(); smp_mb__before_atomic();
set_bit(DQ_READ_B, &dquot->dq_flags); set_bit(DQ_READ_B, &dquot->dq_flags);
...@@ -1049,7 +1050,9 @@ static void remove_dquot_ref(struct super_block *sb, int type, ...@@ -1049,7 +1050,9 @@ static void remove_dquot_ref(struct super_block *sb, int type,
struct list_head *tofree_head) struct list_head *tofree_head)
{ {
struct inode *inode; struct inode *inode;
#ifdef CONFIG_QUOTA_DEBUG
int reserved = 0; int reserved = 0;
#endif
spin_lock(&sb->s_inode_list_lock); spin_lock(&sb->s_inode_list_lock);
list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
...@@ -1061,8 +1064,10 @@ static void remove_dquot_ref(struct super_block *sb, int type, ...@@ -1061,8 +1064,10 @@ static void remove_dquot_ref(struct super_block *sb, int type,
*/ */
spin_lock(&dq_data_lock); spin_lock(&dq_data_lock);
if (!IS_NOQUOTA(inode)) { if (!IS_NOQUOTA(inode)) {
#ifdef CONFIG_QUOTA_DEBUG
if (unlikely(inode_get_rsv_space(inode) > 0)) if (unlikely(inode_get_rsv_space(inode) > 0))
reserved = 1; reserved = 1;
#endif
remove_inode_dquot_ref(inode, type, tofree_head); remove_inode_dquot_ref(inode, type, tofree_head);
} }
spin_unlock(&dq_data_lock); spin_unlock(&dq_data_lock);
...@@ -1663,7 +1668,7 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags) ...@@ -1663,7 +1668,7 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags)
for (cnt = 0; cnt < MAXQUOTAS; cnt++) { for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
if (!dquots[cnt]) if (!dquots[cnt])
continue; continue;
if (flags & DQUOT_SPACE_RESERVE) { if (reserve) {
ret = dquot_add_space(dquots[cnt], 0, number, flags, ret = dquot_add_space(dquots[cnt], 0, number, flags,
&warn[cnt]); &warn[cnt]);
} else { } else {
...@@ -1676,13 +1681,11 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags) ...@@ -1676,13 +1681,11 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags)
if (!dquots[cnt]) if (!dquots[cnt])
continue; continue;
spin_lock(&dquots[cnt]->dq_dqb_lock); spin_lock(&dquots[cnt]->dq_dqb_lock);
if (flags & DQUOT_SPACE_RESERVE) { if (reserve)
dquots[cnt]->dq_dqb.dqb_rsvspace -= dquot_free_reserved_space(dquots[cnt],
number; number);
} else { else
dquots[cnt]->dq_dqb.dqb_curspace -= dquot_decr_space(dquots[cnt], number);
number;
}
spin_unlock(&dquots[cnt]->dq_dqb_lock); spin_unlock(&dquots[cnt]->dq_dqb_lock);
} }
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
...@@ -1733,7 +1736,7 @@ int dquot_alloc_inode(struct inode *inode) ...@@ -1733,7 +1736,7 @@ int dquot_alloc_inode(struct inode *inode)
continue; continue;
/* Back out changes we already did */ /* Back out changes we already did */
spin_lock(&dquots[cnt]->dq_dqb_lock); spin_lock(&dquots[cnt]->dq_dqb_lock);
dquots[cnt]->dq_dqb.dqb_curinodes--; dquot_decr_inodes(dquots[cnt], 1);
spin_unlock(&dquots[cnt]->dq_dqb_lock); spin_unlock(&dquots[cnt]->dq_dqb_lock);
} }
goto warn_put_all; goto warn_put_all;
...@@ -2397,7 +2400,7 @@ static int vfs_load_quota_inode(struct inode *inode, int type, int format_id, ...@@ -2397,7 +2400,7 @@ static int vfs_load_quota_inode(struct inode *inode, int type, int format_id,
out_fmt: out_fmt:
put_quota_format(fmt); put_quota_format(fmt);
return error; return error;
} }
/* Reenable quotas on remount RW */ /* Reenable quotas on remount RW */
...@@ -2775,7 +2778,7 @@ int dquot_get_state(struct super_block *sb, struct qc_state *state) ...@@ -2775,7 +2778,7 @@ int dquot_get_state(struct super_block *sb, struct qc_state *state)
struct qc_type_state *tstate; struct qc_type_state *tstate;
struct quota_info *dqopt = sb_dqopt(sb); struct quota_info *dqopt = sb_dqopt(sb);
int type; int type;
memset(state, 0, sizeof(*state)); memset(state, 0, sizeof(*state));
for (type = 0; type < MAXQUOTAS; type++) { for (type = 0; type < MAXQUOTAS; type++) {
if (!sb_has_quota_active(sb, type)) if (!sb_has_quota_active(sb, type))
......
...@@ -127,7 +127,7 @@ static int v1_check_quota_file(struct super_block *sb, int type) ...@@ -127,7 +127,7 @@ static int v1_check_quota_file(struct super_block *sb, int type)
{ {
struct inode *inode = sb_dqopt(sb)->files[type]; struct inode *inode = sb_dqopt(sb)->files[type];
ulong blocks; ulong blocks;
size_t off; size_t off;
struct v2_disk_dqheader dqhead; struct v2_disk_dqheader dqhead;
ssize_t size; ssize_t size;
loff_t isize; loff_t isize;
......
...@@ -78,7 +78,7 @@ static int v2_check_quota_file(struct super_block *sb, int type) ...@@ -78,7 +78,7 @@ static int v2_check_quota_file(struct super_block *sb, int type)
struct v2_disk_dqheader dqhead; struct v2_disk_dqheader dqhead;
static const uint quota_magics[] = V2_INITQMAGICS; static const uint quota_magics[] = V2_INITQMAGICS;
static const uint quota_versions[] = V2_INITQVERSIONS; static const uint quota_versions[] = V2_INITQVERSIONS;
if (v2_read_header(sb, type, &dqhead)) if (v2_read_header(sb, type, &dqhead))
return 0; return 0;
if (le32_to_cpu(dqhead.dqh_magic) != quota_magics[type] || if (le32_to_cpu(dqhead.dqh_magic) != quota_magics[type] ||
......
...@@ -1844,7 +1844,7 @@ static int flush_used_journal_lists(struct super_block *s, ...@@ -1844,7 +1844,7 @@ static int flush_used_journal_lists(struct super_block *s,
* removes any nodes in table with name block and dev as bh. * removes any nodes in table with name block and dev as bh.
* only touchs the hnext and hprev pointers. * only touchs the hnext and hprev pointers.
*/ */
void remove_journal_hash(struct super_block *sb, static void remove_journal_hash(struct super_block *sb,
struct reiserfs_journal_cnode **table, struct reiserfs_journal_cnode **table,
struct reiserfs_journal_list *jl, struct reiserfs_journal_list *jl,
unsigned long block, int remove_freed) unsigned long block, int remove_freed)
......
...@@ -304,21 +304,6 @@ static struct dentry *udf_lookup(struct inode *dir, struct dentry *dentry, ...@@ -304,21 +304,6 @@ static struct dentry *udf_lookup(struct inode *dir, struct dentry *dentry,
if (dentry->d_name.len > UDF_NAME_LEN) if (dentry->d_name.len > UDF_NAME_LEN)
return ERR_PTR(-ENAMETOOLONG); return ERR_PTR(-ENAMETOOLONG);
#ifdef UDF_RECOVERY
/* temporary shorthand for specifying files by inode number */
if (!strncmp(dentry->d_name.name, ".B=", 3)) {
struct kernel_lb_addr lb = {
.logicalBlockNum = 0,
.partitionReferenceNum =
simple_strtoul(dentry->d_name.name + 3,
NULL, 0),
};
inode = udf_iget(dir->i_sb, lb);
if (IS_ERR(inode))
return inode;
} else
#endif /* UDF_RECOVERY */
fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi);
if (IS_ERR(fi)) if (IS_ERR(fi))
return ERR_CAST(fi); return ERR_CAST(fi);
......
...@@ -566,6 +566,11 @@ static int udf_parse_options(char *options, struct udf_options *uopt, ...@@ -566,6 +566,11 @@ static int udf_parse_options(char *options, struct udf_options *uopt,
if (!remount) { if (!remount) {
if (uopt->nls_map) if (uopt->nls_map)
unload_nls(uopt->nls_map); unload_nls(uopt->nls_map);
/*
* load_nls() failure is handled later in
* udf_fill_super() after all options are
* parsed.
*/
uopt->nls_map = load_nls(args[0].from); uopt->nls_map = load_nls(args[0].from);
uopt->flags |= (1 << UDF_FLAG_NLS_MAP); uopt->flags |= (1 << UDF_FLAG_NLS_MAP);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment