]>
Commit | Line | Data |
---|---|---|
a5dc67e6 GKH |
1 | From 05b5d898235401c489c68e1f3bc5706a29ad5713 Mon Sep 17 00:00:00 2001 |
2 | From: Jan Kara <jack@suse.cz> | |
3 | Date: Wed, 6 Jan 2010 18:03:36 +0100 | |
4 | Subject: quota: Fix dquot_transfer for filesystems different from ext4 | |
5 | ||
6 | From: Jan Kara <jack@suse.cz> | |
7 | ||
8 | commit 05b5d898235401c489c68e1f3bc5706a29ad5713 upstream. | |
9 | ||
10 | Commit fd8fbfc1 modified the way we find amount of reserved space | |
11 | belonging to an inode. The amount of reserved space is checked | |
12 | from dquot_transfer and thus inode_reserved_space gets called | |
13 | even for filesystems that don't provide get_reserved_space callback | |
14 | which results in a BUG. | |
15 | ||
16 | Fix the problem by checking get_reserved_space callback and return 0 if | |
17 | the filesystem does not provide it. | |
18 | ||
19 | CC: Dmitry Monakhov <dmonakhov@openvz.org> | |
20 | Signed-off-by: Jan Kara <jack@suse.cz> | |
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
22 | ||
23 | --- | |
24 | fs/quota/dquot.c | 3 +++ | |
25 | 1 file changed, 3 insertions(+) | |
26 | ||
27 | --- a/fs/quota/dquot.c | |
28 | +++ b/fs/quota/dquot.c | |
29 | @@ -1425,6 +1425,9 @@ static void inode_sub_rsv_space(struct i | |
30 | static qsize_t inode_get_rsv_space(struct inode *inode) | |
31 | { | |
32 | qsize_t ret; | |
33 | + | |
34 | + if (!inode->i_sb->dq_op->get_reserved_space) | |
35 | + return 0; | |
36 | spin_lock(&inode->i_lock); | |
37 | ret = *inode_reserved_space(inode); | |
38 | spin_unlock(&inode->i_lock); |