diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-16 18:46:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-16 18:46:01 -0500 |
commit | 31f48fc8f226f968d6e6b9b9718abe8e16c51fe8 (patch) | |
tree | b2f990f32448b097ec418d37c173483ebab18f54 /fs/isofs | |
parent | 0b233b7c79d2ba92c7fb5d60d4116693f1b3b0fe (diff) | |
parent | f54e18f1b831c92f6512d2eedb224cd63d607d3d (diff) |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull isofs and reiserfs fixes from Jan Kara:
"A reiserfs and an isofs fix. They arrived after I sent you my first
pull request and I don't want to delay them unnecessarily till rc2"
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
isofs: Fix infinite looping over CE entries
reiserfs: destroy allocated commit workqueue
Diffstat (limited to 'fs/isofs')
-rw-r--r-- | fs/isofs/rock.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c index f488bbae541a..bb63254ed848 100644 --- a/fs/isofs/rock.c +++ b/fs/isofs/rock.c | |||
@@ -30,6 +30,7 @@ struct rock_state { | |||
30 | int cont_size; | 30 | int cont_size; |
31 | int cont_extent; | 31 | int cont_extent; |
32 | int cont_offset; | 32 | int cont_offset; |
33 | int cont_loops; | ||
33 | struct inode *inode; | 34 | struct inode *inode; |
34 | }; | 35 | }; |
35 | 36 | ||
@@ -73,6 +74,9 @@ static void init_rock_state(struct rock_state *rs, struct inode *inode) | |||
73 | rs->inode = inode; | 74 | rs->inode = inode; |
74 | } | 75 | } |
75 | 76 | ||
77 | /* Maximum number of Rock Ridge continuation entries */ | ||
78 | #define RR_MAX_CE_ENTRIES 32 | ||
79 | |||
76 | /* | 80 | /* |
77 | * Returns 0 if the caller should continue scanning, 1 if the scan must end | 81 | * Returns 0 if the caller should continue scanning, 1 if the scan must end |
78 | * and -ve on error. | 82 | * and -ve on error. |
@@ -105,6 +109,8 @@ static int rock_continue(struct rock_state *rs) | |||
105 | goto out; | 109 | goto out; |
106 | } | 110 | } |
107 | ret = -EIO; | 111 | ret = -EIO; |
112 | if (++rs->cont_loops >= RR_MAX_CE_ENTRIES) | ||
113 | goto out; | ||
108 | bh = sb_bread(rs->inode->i_sb, rs->cont_extent); | 114 | bh = sb_bread(rs->inode->i_sb, rs->cont_extent); |
109 | if (bh) { | 115 | if (bh) { |
110 | memcpy(rs->buffer, bh->b_data + rs->cont_offset, | 116 | memcpy(rs->buffer, bh->b_data + rs->cont_offset, |