isofs: Remove global fs lock
authorJan Kara <jack@suse.cz>
Thu, 21 Jul 2011 20:22:25 +0000 (22:22 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 22 Jul 2011 23:42:12 +0000 (19:42 -0400)
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>
fs/isofs/dir.c
fs/isofs/inode.c
fs/isofs/isofs.h
fs/isofs/namei.c
fs/isofs/rock.c

index 0542b6eedf8060b64103cb86abb9643df499a2cf..f20437c068a0bb344db90f2576e836445514eece 100644 (file)
@@ -254,19 +254,16 @@ static int isofs_readdir(struct file *filp,
        char *tmpname;
        struct iso_directory_record *tmpde;
        struct inode *inode = filp->f_path.dentry->d_inode;
-       struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb);
 
        tmpname = (char *)__get_free_page(GFP_KERNEL);
        if (tmpname == NULL)
                return -ENOMEM;
 
-       mutex_lock(&sbi->s_mutex);
        tmpde = (struct iso_directory_record *) (tmpname+1024);
 
        result = do_isofs_readdir(inode, filp, dirent, filldir, tmpname, tmpde);
 
        free_page((unsigned long) tmpname);
-       mutex_unlock(&sbi->s_mutex);
        return result;
 }
 
index b3cc8586984e9748ff3c66e6c8703fa84c822c1c..a5d03672d04edbd76f6014124922aea631ba9ed7 100644 (file)
@@ -863,7 +863,6 @@ root_found:
        sbi->s_utf8 = opt.utf8;
        sbi->s_nocompress = opt.nocompress;
        sbi->s_overriderockperm = opt.overriderockperm;
-       mutex_init(&sbi->s_mutex);
        /*
         * It would be incredibly stupid to allow people to mark every file
         * on the disk as suid, so we merely allow them to set the default
index 2882dc089f87ce60c92e534d5cc6219030e4103f..7d33de84f52adec9b647bfc23f883f811f939ca9 100644 (file)
@@ -55,7 +55,6 @@ struct isofs_sb_info {
        gid_t s_gid;
        uid_t s_uid;
        struct nls_table *s_nls_iocharset; /* Native language support table */
-       struct mutex s_mutex; /* replaces BKL, please remove if possible */
 };
 
 #define ISOFS_INVALID_MODE ((mode_t) -1)
index 68fa503d877e0c515c09d906aac176bfd33dc4c4..1e2946f2a69e5ac6dd17924f124459b318439eb8 100644 (file)
@@ -168,7 +168,6 @@ struct dentry *isofs_lookup(struct inode *dir, struct dentry *dentry, struct nam
        int found;
        unsigned long uninitialized_var(block);
        unsigned long uninitialized_var(offset);
-       struct isofs_sb_info *sbi = ISOFS_SB(dir->i_sb);
        struct inode *inode;
        struct page *page;
 
@@ -176,7 +175,6 @@ struct dentry *isofs_lookup(struct inode *dir, struct dentry *dentry, struct nam
        if (!page)
                return ERR_PTR(-ENOMEM);
 
-       mutex_lock(&sbi->s_mutex);
        found = isofs_find_entry(dir, dentry,
                                &block, &offset,
                                page_address(page),
@@ -185,7 +183,5 @@ struct dentry *isofs_lookup(struct inode *dir, struct dentry *dentry, struct nam
 
        inode = found ? isofs_iget(dir->i_sb, block, offset) : NULL;
 
-       mutex_unlock(&sbi->s_mutex);
-
        return d_splice_alias(inode, dentry);
 }
index f9cd04db6eab9509958a375a65f3b4d8eb0d6d90..1fbc7de88f50ea6c11e3335eff02ec95e82da4b1 100644 (file)
@@ -678,7 +678,6 @@ static int rock_ridge_symlink_readpage(struct file *file, struct page *page)
 
        init_rock_state(&rs, inode);
        block = ei->i_iget5_block;
-       mutex_lock(&sbi->s_mutex);
        bh = sb_bread(inode->i_sb, block);
        if (!bh)
                goto out_noread;
@@ -748,7 +747,6 @@ repeat:
                goto fail;
        brelse(bh);
        *rpnt = '\0';
-       mutex_unlock(&sbi->s_mutex);
        SetPageUptodate(page);
        kunmap(page);
        unlock_page(page);
@@ -765,7 +763,6 @@ out_bad_span:
        printk("symlink spans iso9660 blocks\n");
 fail:
        brelse(bh);
-       mutex_unlock(&sbi->s_mutex);
 error:
        SetPageError(page);
        kunmap(page);