aboutsummaryrefslogtreecommitdiffstats
path: root/fs/isofs
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2011-07-21 16:22:25 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-07-22 19:42:12 -0400
commitd769b3c2ab7184ddd42056595b627cc871caa90e (patch)
treeb030270648c2a2aca7c5417e2ae0436ec7d0a31c /fs/isofs
parent22ba747f660c0acd14761628c24aa972d18058a0 (diff)
isofs: Remove global fs lock
sbi->s_mutex isn't needed for isofs at all so we can just remove it. Generally, since isofs is always mounted read-only, filesystem structure cannot change under us. So buffer_head contents stays constant after it's filled in. That leaves us with possible changes of global data structures. Superblock changes only during filesystem mount (even remount does not change it), inodes are only filled in during reading from disk. So there are no changes of these structures to bother about. Arguments why sbi->s_mutex can be removed at each place: isofs_readdir: Accesses sb, inode, filp, local variables => s_mutex not needed isofs_lookup: Protected by directory's i_mutex. Accesses sb, inode, dentry, local variables => s_mutex not needed rock_ridge_symlink_readpage: Protected by page lock. Accesses sb, inode, local variables => s_mutex not needed. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/isofs')
-rw-r--r--fs/isofs/dir.c3
-rw-r--r--fs/isofs/inode.c1
-rw-r--r--fs/isofs/isofs.h1
-rw-r--r--fs/isofs/namei.c4
-rw-r--r--fs/isofs/rock.c3
5 files changed, 0 insertions, 12 deletions
diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c
index 0542b6eedf8..f20437c068a 100644
--- a/fs/isofs/dir.c
+++ b/fs/isofs/dir.c
@@ -254,19 +254,16 @@ static int isofs_readdir(struct file *filp,
254 char *tmpname; 254 char *tmpname;
255 struct iso_directory_record *tmpde; 255 struct iso_directory_record *tmpde;
256 struct inode *inode = filp->f_path.dentry->d_inode; 256 struct inode *inode = filp->f_path.dentry->d_inode;
257 struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb);
258 257
259 tmpname = (char *)__get_free_page(GFP_KERNEL); 258 tmpname = (char *)__get_free_page(GFP_KERNEL);
260 if (tmpname == NULL) 259 if (tmpname == NULL)
261 return -ENOMEM; 260 return -ENOMEM;
262 261
263 mutex_lock(&sbi->s_mutex);
264 tmpde = (struct iso_directory_record *) (tmpname+1024); 262 tmpde = (struct iso_directory_record *) (tmpname+1024);
265 263
266 result = do_isofs_readdir(inode, filp, dirent, filldir, tmpname, tmpde); 264 result = do_isofs_readdir(inode, filp, dirent, filldir, tmpname, tmpde);
267 265
268 free_page((unsigned long) tmpname); 266 free_page((unsigned long) tmpname);
269 mutex_unlock(&sbi->s_mutex);
270 return result; 267 return result;
271} 268}
272 269
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index b3cc8586984..a5d03672d04 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -863,7 +863,6 @@ root_found:
863 sbi->s_utf8 = opt.utf8; 863 sbi->s_utf8 = opt.utf8;
864 sbi->s_nocompress = opt.nocompress; 864 sbi->s_nocompress = opt.nocompress;
865 sbi->s_overriderockperm = opt.overriderockperm; 865 sbi->s_overriderockperm = opt.overriderockperm;
866 mutex_init(&sbi->s_mutex);
867 /* 866 /*
868 * It would be incredibly stupid to allow people to mark every file 867 * It would be incredibly stupid to allow people to mark every file
869 * on the disk as suid, so we merely allow them to set the default 868 * on the disk as suid, so we merely allow them to set the default
diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h
index 2882dc089f8..7d33de84f52 100644
--- a/fs/isofs/isofs.h
+++ b/fs/isofs/isofs.h
@@ -55,7 +55,6 @@ struct isofs_sb_info {
55 gid_t s_gid; 55 gid_t s_gid;
56 uid_t s_uid; 56 uid_t s_uid;
57 struct nls_table *s_nls_iocharset; /* Native language support table */ 57 struct nls_table *s_nls_iocharset; /* Native language support table */
58 struct mutex s_mutex; /* replaces BKL, please remove if possible */
59}; 58};
60 59
61#define ISOFS_INVALID_MODE ((mode_t) -1) 60#define ISOFS_INVALID_MODE ((mode_t) -1)
diff --git a/fs/isofs/namei.c b/fs/isofs/namei.c
index 68fa503d877..1e2946f2a69 100644
--- a/fs/isofs/namei.c
+++ b/fs/isofs/namei.c
@@ -168,7 +168,6 @@ struct dentry *isofs_lookup(struct inode *dir, struct dentry *dentry, struct nam
168 int found; 168 int found;
169 unsigned long uninitialized_var(block); 169 unsigned long uninitialized_var(block);
170 unsigned long uninitialized_var(offset); 170 unsigned long uninitialized_var(offset);
171 struct isofs_sb_info *sbi = ISOFS_SB(dir->i_sb);
172 struct inode *inode; 171 struct inode *inode;
173 struct page *page; 172 struct page *page;
174 173
@@ -176,7 +175,6 @@ struct dentry *isofs_lookup(struct inode *dir, struct dentry *dentry, struct nam
176 if (!page) 175 if (!page)
177 return ERR_PTR(-ENOMEM); 176 return ERR_PTR(-ENOMEM);
178 177
179 mutex_lock(&sbi->s_mutex);
180 found = isofs_find_entry(dir, dentry, 178 found = isofs_find_entry(dir, dentry,
181 &block, &offset, 179 &block, &offset,
182 page_address(page), 180 page_address(page),
@@ -185,7 +183,5 @@ struct dentry *isofs_lookup(struct inode *dir, struct dentry *dentry, struct nam
185 183
186 inode = found ? isofs_iget(dir->i_sb, block, offset) : NULL; 184 inode = found ? isofs_iget(dir->i_sb, block, offset) : NULL;
187 185
188 mutex_unlock(&sbi->s_mutex);
189
190 return d_splice_alias(inode, dentry); 186 return d_splice_alias(inode, dentry);
191} 187}
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
index f9cd04db6ea..1fbc7de88f5 100644
--- a/fs/isofs/rock.c
+++ b/fs/isofs/rock.c
@@ -678,7 +678,6 @@ static int rock_ridge_symlink_readpage(struct file *file, struct page *page)
678 678
679 init_rock_state(&rs, inode); 679 init_rock_state(&rs, inode);
680 block = ei->i_iget5_block; 680 block = ei->i_iget5_block;
681 mutex_lock(&sbi->s_mutex);
682 bh = sb_bread(inode->i_sb, block); 681 bh = sb_bread(inode->i_sb, block);
683 if (!bh) 682 if (!bh)
684 goto out_noread; 683 goto out_noread;
@@ -748,7 +747,6 @@ repeat:
748 goto fail; 747 goto fail;
749 brelse(bh); 748 brelse(bh);
750 *rpnt = '\0'; 749 *rpnt = '\0';
751 mutex_unlock(&sbi->s_mutex);
752 SetPageUptodate(page); 750 SetPageUptodate(page);
753 kunmap(page); 751 kunmap(page);
754 unlock_page(page); 752 unlock_page(page);
@@ -765,7 +763,6 @@ out_bad_span:
765 printk("symlink spans iso9660 blocks\n"); 763 printk("symlink spans iso9660 blocks\n");
766fail: 764fail:
767 brelse(bh); 765 brelse(bh);
768 mutex_unlock(&sbi->s_mutex);
769error: 766error:
770 SetPageError(page); 767 SetPageError(page);
771 kunmap(page); 768 kunmap(page);