fat: drop lock/unlock super
Subsystems (2)
PATCH 4/8 fat: drop lock/unlock super
Removed lock/unlock super. Added a new private s_lock mutex.
Signed-off-by Marco Stornelli <[email protected]>
--- fs/fat/dir.c | 4 ++-- fs/fat/fat.h | 1 + fs/fat/inode.c | 9 +++++---- fs/fat/namei_msdos.c | 26 +++++++++++++------------- fs/fat/namei_vfat.c | 30 +++++++++++++++--------------- 5 files changed, 36 insertions(+), 34 deletions(-)
fs/fat/dir.c +2 -2
@@ -568,7 +568,7 @@ static int __fat_readdir(struct inode *inode, struct file *filp, void *dirent,int short_len =0 , fill_len =0 ;int ret =0 ; -lock_super (sb); +mutex_lock (&sbi->s_lock); cpos = filp->f_pos;/* Fake . and .. for the root directory. */
@@ -689,7 +689,7 @@ fill_failed:if (unicode)__putname (unicode); out: -unlock_super (sb); +mutex_unlock (&sbi->s_lock);return ret; }
fs/fat/fat.h +1 -0
@@ -69,6 +69,7 @@ struct msdos_sb_info {unsigned long root_cluster;/* first cluster of the root directory */ unsigned long fsinfo_sector;/* sector number of FAT32 fsinfo */ struct mutex fat_lock; +struct mutex s_lock;unsigned int prev_free;/* previously allocated cluster number */ unsigned int free_clusters;/* -1 if undefined */ unsigned int free_clus_valid;/* is free_clusters valid? */
fs/fat/inode.c +5 -4
@@ -634,9 +634,9 @@ static int fat_write_inode(struct inode *inode, struct writeback_control *wbc)if (inode->i_ino ==MSDOS_FSINFO_INO ) {struct super_block *sb = inode->i_sb; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =fat_clusters_flush (sb); -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock); }else err =__fat_write_inode (inode, wbc->sync_mode ==WB_SYNC_ALL );
@@ -762,7 +762,7 @@ static struct dentry *fat_get_parent(struct dentry *child)struct inode *inode;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =fat_get_dotdot_entry (child->d_inode, &bh, &de, &i_pos);if (err) {
@@ -774,7 +774,7 @@ static struct dentry *fat_get_parent(struct dentry *child) parent =d_obtain_alias (inode); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return parent; }
@@ -1332,6 +1332,7 @@ int fat_fill_super(struct super_block *sb, void *data, int silent, int isvfat, b = (struct fat_boot_sector *) bh->b_data; } +mutex_init (&sbi->s_lock); sbi->cluster_size = sb->s_blocksize * sbi->sec_per_clus; sbi->cluster_bits =ffs (sbi->cluster_size) -1 ; sbi->fats = b->fats;
fs/fat/namei_msdos.c +13 -13
@@ -208,7 +208,7 @@ static struct dentry *msdos_lookup(struct inode *dir, struct dentry *dentry,struct inode *inode;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =msdos_find (dir, dentry->d_name.name, dentry->d_name.len, &sinfo);switch (err) {case -ENOENT :
@@ -221,7 +221,7 @@ static struct dentry *msdos_lookup(struct inode *dir, struct dentry *dentry,default : inode =ERR_PTR (err); } -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return d_splice_alias (inode, dentry); }
@@ -273,7 +273,7 @@ static int msdos_create(struct inode *dir, struct dentry *dentry, umode_t mode,unsigned char msdos_name[MSDOS_NAME ];int err, is_hid; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =msdos_format_name (dentry->d_name.name, dentry->d_name.len, msdos_name, &MSDOS_SB (sb)->options);
@@ -302,7 +302,7 @@ static int msdos_create(struct inode *dir, struct dentry *dentry, umode_t mode,d_instantiate (dentry, inode); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);if (!err) err =fat_flush_inodes (sb, dir, inode);return err;
@@ -316,7 +316,7 @@ static int msdos_rmdir(struct inode *dir, struct dentry *dentry)struct fat_slot_info sinfo;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock);/* * Check whether the directory is not in use, then check * whether it is empty.
@@ -337,7 +337,7 @@ static int msdos_rmdir(struct inode *dir, struct dentry *dentry) inode->i_ctime =CURRENT_TIME_SEC ;fat_detach (inode); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);if (!err) err =fat_flush_inodes (sb, dir, inode);
@@ -354,7 +354,7 @@ static int msdos_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)struct timespec ts;int err, is_hid, cluster; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =msdos_format_name (dentry->d_name.name, dentry->d_name.len, msdos_name, &MSDOS_SB (sb)->options);
@@ -392,14 +392,14 @@ static int msdos_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)d_instantiate (dentry, inode); -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);fat_flush_inodes (sb, dir, inode);return 0 ; out_free:fat_free_clusters (dir, cluster); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return err; }
@@ -411,7 +411,7 @@ static int msdos_unlink(struct inode *dir, struct dentry *dentry)struct fat_slot_info sinfo;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =msdos_find (dir, dentry->d_name.name, dentry->d_name.len, &sinfo);if (err) goto out;
@@ -423,7 +423,7 @@ static int msdos_unlink(struct inode *dir, struct dentry *dentry) inode->i_ctime =CURRENT_TIME_SEC ;fat_detach (inode); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);if (!err) err =fat_flush_inodes (sb, dir, inode);
@@ -607,7 +607,7 @@ static int msdos_rename(struct inode *old_dir, struct dentry *old_dentry,unsigned char old_msdos_name[MSDOS_NAME ], new_msdos_name[MSDOS_NAME ];int err, is_hid; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err = msdos_format_name(old_dentry->d_name.name, old_dentry->d_name.len, old_msdos_name,
@@ -626,7 +626,7 @@ static int msdos_rename(struct inode *old_dir, struct dentry *old_dentry, err =do_msdos_rename (old_dir, old_msdos_name, old_dentry, new_dir, new_msdos_name, new_dentry, is_hid); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);if (!err) err =fat_flush_inodes (sb, old_dir, new_dir);return err;
fs/fat/namei_vfat.c +15 -15
@@ -721,7 +721,7 @@ static struct dentry *vfat_lookup(struct inode *dir, struct dentry *dentry,struct dentry *alias;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =vfat_find (dir, &dentry->d_name, &sinfo);if (err) {
@@ -752,13 +752,13 @@ static struct dentry *vfat_lookup(struct inode *dir, struct dentry *dentry,if (!S_ISDIR (inode->i_mode))d_move (alias, dentry);iput (inode); -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return alias; }else dput (alias); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock); dentry->d_time = dentry->d_parent->d_inode->i_version; dentry =d_splice_alias (inode, dentry);if (dentry)
@@ -766,7 +766,7 @@ out:return dentry; error: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return ERR_PTR (err); }
@@ -779,7 +779,7 @@ static int vfat_create(struct inode *dir, struct dentry *dentry, umode_t mode,struct timespec ts;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); ts =CURRENT_TIME_SEC ; err =vfat_add_entry (dir, &dentry->d_name,0 ,0 , &ts, &sinfo);
@@ -800,7 +800,7 @@ static int vfat_create(struct inode *dir, struct dentry *dentry, umode_t mode, dentry->d_time = dentry->d_parent->d_inode->i_version;d_instantiate (dentry, inode); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return err; }
@@ -811,7 +811,7 @@ static int vfat_rmdir(struct inode *dir, struct dentry *dentry)struct fat_slot_info sinfo;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =fat_dir_empty (inode);if (err)
@@ -829,7 +829,7 @@ static int vfat_rmdir(struct inode *dir, struct dentry *dentry) inode->i_mtime = inode->i_atime =CURRENT_TIME_SEC ;fat_detach (inode); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return err; }
@@ -841,7 +841,7 @@ static int vfat_unlink(struct inode *dir, struct dentry *dentry)struct fat_slot_info sinfo;int err; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =vfat_find (dir, &dentry->d_name, &sinfo);if (err)
@@ -854,7 +854,7 @@ static int vfat_unlink(struct inode *dir, struct dentry *dentry) inode->i_mtime = inode->i_atime =CURRENT_TIME_SEC ;fat_detach (inode); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return err; }
@@ -867,7 +867,7 @@ static int vfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)struct timespec ts;int err, cluster; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); ts =CURRENT_TIME_SEC ; cluster =fat_alloc_new_dir (dir, &ts);
@@ -896,13 +896,13 @@ static int vfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) dentry->d_time = dentry->d_parent->d_inode->i_version;d_instantiate (dentry, inode); -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return 0 ; out_free:fat_free_clusters (dir, cluster); out: -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return err; }
@@ -921,7 +921,7 @@ static int vfat_rename(struct inode *old_dir, struct dentry *old_dentry, old_sinfo.bh = sinfo.bh = dotdot_bh =NULL ; old_inode = old_dentry->d_inode; new_inode = new_dentry->d_inode; -lock_super (sb); +mutex_lock (&MSDOS_SB (sb)->s_lock); err =vfat_find (old_dir, &old_dentry->d_name, &old_sinfo);if (err) goto out;
@@ -997,7 +997,7 @@ out:brelse (sinfo.bh);brelse (dotdot_bh);brelse (old_sinfo.bh); -unlock_super (sb); +mutex_unlock (&MSDOS_SB (sb)->s_lock);return err;
Signature · 1 line
1.7.3.4