Skip to content

Commit

Permalink
Make FAT users happier by not deadlocking
Browse files Browse the repository at this point in the history
The FAT BKL removal patch can cause deadlocks.  It turns out that the new
lock_super() calls are unneeded, remove them (as directed by Linus).

Reported-by: "Tony Luck" <tony.luck@intel.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
  • Loading branch information
Jonathan Corbet committed Jul 2, 2008
1 parent 38c4c97 commit 9c20616
Showing 1 changed file with 1 addition and 9 deletions.
10 changes: 1 addition & 9 deletions fs/fat/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include <linux/mount.h>
#include <linux/time.h>
#include <linux/msdos_fs.h>
#include <linux/smp_lock.h>
#include <linux/buffer_head.h>
#include <linux/writeback.h>
#include <linux/backing-dev.h>
Expand Down Expand Up @@ -229,8 +228,7 @@ static int fat_free(struct inode *inode, int skip)

void fat_truncate(struct inode *inode)
{
struct super_block *sb = inode->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb);
struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
const unsigned int cluster_size = sbi->cluster_size;
int nr_clusters;

Expand All @@ -243,9 +241,7 @@ void fat_truncate(struct inode *inode)

nr_clusters = (inode->i_size + (cluster_size - 1)) >> sbi->cluster_bits;

lock_super(sb);
fat_free(inode, nr_clusters);
unlock_super(sb);
fat_flush_inodes(inode->i_sb, inode, NULL);
}

Expand Down Expand Up @@ -298,14 +294,11 @@ static int fat_allow_set_time(struct msdos_sb_info *sbi, struct inode *inode)

int fat_setattr(struct dentry *dentry, struct iattr *attr)
{
struct super_block *sb = dentry->d_sb;
struct msdos_sb_info *sbi = MSDOS_SB(dentry->d_sb);
struct inode *inode = dentry->d_inode;
int mask, error = 0;
unsigned int ia_valid;

lock_super(sb);

/*
* Expand the file. Since inode_setattr() updates ->i_size
* before calling the ->truncate(), but FAT needs to fill the
Expand Down Expand Up @@ -358,7 +351,6 @@ int fat_setattr(struct dentry *dentry, struct iattr *attr)
mask = sbi->options.fs_fmask;
inode->i_mode &= S_IFMT | (S_IRWXUGO & ~mask);
out:
unlock_super(sb);
return error;
}
EXPORT_SYMBOL_GPL(fat_setattr);
Expand Down

0 comments on commit 9c20616

Please sign in to comment.