Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

udf: Remove unnecessary bkl usages

The udf_readdir(), udf_lookup(), udf_create(), udf_mknod(), udf_mkdir(),
udf_rmdir(), udf_link(), udf_get_parent() and udf_unlink() seems already
adequately protected by i_mutex held by VFS invoking calls. The udf_rename()
instead should be already protected by lock_rename again by VFS. The
udf_ioctl(), udf_fill_super() and udf_evict_inode() don't requires any further
protection.

This work was supported by a hardware donation from the CE Linux Forum.

Signed-off-by: Alessio Igor Bogani <abogani@texware.it>
Signed-off-by: Jan Kara <jack@suse.cz>

authored by

Alessio Igor Bogani and committed by
Jan Kara
9db9f9e3 7db09be6

+1 -47
-5
fs/udf/dir.c
··· 30 30 #include <linux/errno.h> 31 31 #include <linux/mm.h> 32 32 #include <linux/slab.h> 33 - #include <linux/smp_lock.h> 34 33 #include <linux/buffer_head.h> 35 34 36 35 #include "udf_i.h" ··· 189 190 struct inode *dir = filp->f_path.dentry->d_inode; 190 191 int result; 191 192 192 - lock_kernel(); 193 - 194 193 if (filp->f_pos == 0) { 195 194 if (filldir(dirent, ".", 1, filp->f_pos, dir->i_ino, DT_DIR) < 0) { 196 - unlock_kernel(); 197 195 return 0; 198 196 } 199 197 filp->f_pos++; 200 198 } 201 199 202 200 result = do_udf_readdir(dir, filp, filldir, dirent); 203 - unlock_kernel(); 204 201 return result; 205 202 } 206 203
-4
fs/udf/file.c
··· 32 32 #include <linux/string.h> /* memset */ 33 33 #include <linux/capability.h> 34 34 #include <linux/errno.h> 35 - #include <linux/smp_lock.h> 36 35 #include <linux/pagemap.h> 37 36 #include <linux/buffer_head.h> 38 37 #include <linux/aio.h> ··· 148 149 long old_block, new_block; 149 150 int result = -EINVAL; 150 151 151 - lock_kernel(); 152 - 153 152 if (file_permission(filp, MAY_READ) != 0) { 154 153 udf_debug("no permission to access inode %lu\n", inode->i_ino); 155 154 result = -EPERM; ··· 193 196 } 194 197 195 198 out: 196 - unlock_kernel(); 197 199 return result; 198 200 } 199 201
-3
fs/udf/inode.c
··· 31 31 32 32 #include "udfdecl.h" 33 33 #include <linux/mm.h> 34 - #include <linux/smp_lock.h> 35 34 #include <linux/module.h> 36 35 #include <linux/pagemap.h> 37 36 #include <linux/buffer_head.h> ··· 95 96 kfree(iinfo->i_ext.i_data); 96 97 iinfo->i_ext.i_data = NULL; 97 98 if (want_delete) { 98 - lock_kernel(); 99 99 udf_free_inode(inode); 100 - unlock_kernel(); 101 100 } 102 101 } 103 102
-27
fs/udf/namei.c
··· 27 27 #include <linux/errno.h> 28 28 #include <linux/mm.h> 29 29 #include <linux/slab.h> 30 - #include <linux/smp_lock.h> 31 30 #include <linux/buffer_head.h> 32 31 #include <linux/sched.h> 33 32 #include <linux/crc-itu-t.h> ··· 262 263 if (dentry->d_name.len > UDF_NAME_LEN - 2) 263 264 return ERR_PTR(-ENAMETOOLONG); 264 265 265 - lock_kernel(); 266 266 #ifdef UDF_RECOVERY 267 267 /* temporary shorthand for specifying files by inode number */ 268 268 if (!strncmp(dentry->d_name.name, ".B=", 3)) { ··· 273 275 }; 274 276 inode = udf_iget(dir->i_sb, lb); 275 277 if (!inode) { 276 - unlock_kernel(); 277 278 return ERR_PTR(-EACCES); 278 279 } 279 280 } else ··· 288 291 loc = lelb_to_cpu(cfi.icb.extLocation); 289 292 inode = udf_iget(dir->i_sb, &loc); 290 293 if (!inode) { 291 - unlock_kernel(); 292 294 return ERR_PTR(-EACCES); 293 295 } 294 296 } 295 - unlock_kernel(); 296 297 297 298 return d_splice_alias(inode, dentry); 298 299 } ··· 557 562 int err; 558 563 struct udf_inode_info *iinfo; 559 564 560 - lock_kernel(); 561 565 inode = udf_new_inode(dir, mode, &err); 562 566 if (!inode) { 563 - unlock_kernel(); 564 567 return err; 565 568 } 566 569 ··· 576 583 inode->i_nlink--; 577 584 mark_inode_dirty(inode); 578 585 iput(inode); 579 - unlock_kernel(); 580 586 return err; 581 587 } 582 588 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); ··· 588 596 if (fibh.sbh != fibh.ebh) 589 597 brelse(fibh.ebh); 590 598 brelse(fibh.sbh); 591 - unlock_kernel(); 592 599 d_instantiate(dentry, inode); 593 600 594 601 return 0; ··· 605 614 if (!old_valid_dev(rdev)) 606 615 return -EINVAL; 607 616 608 - lock_kernel(); 609 617 err = -EIO; 610 618 inode = udf_new_inode(dir, mode, &err); 611 619 if (!inode) ··· 617 627 inode->i_nlink--; 618 628 mark_inode_dirty(inode); 619 629 iput(inode); 620 - unlock_kernel(); 621 630 return err; 622 631 } 623 632 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); ··· 635 646 err = 0; 636 647 637 648 out: 638 - unlock_kernel(); 639 649 return err; 640 650 } 641 651 ··· 647 659 struct udf_inode_info *dinfo = UDF_I(dir); 648 660 struct udf_inode_info *iinfo; 649 661 650 - lock_kernel(); 651 662 err = -EMLINK; 652 663 if (dir->i_nlink >= (256 << sizeof(dir->i_nlink)) - 1) 653 664 goto out; ··· 699 712 err = 0; 700 713 701 714 out: 702 - unlock_kernel(); 703 715 return err; 704 716 } 705 717 ··· 780 794 struct kernel_lb_addr tloc; 781 795 782 796 retval = -ENOENT; 783 - lock_kernel(); 784 797 fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); 785 798 if (!fi) 786 799 goto out; ··· 811 826 brelse(fibh.sbh); 812 827 813 828 out: 814 - unlock_kernel(); 815 829 return retval; 816 830 } 817 831 ··· 824 840 struct kernel_lb_addr tloc; 825 841 826 842 retval = -ENOENT; 827 - lock_kernel(); 828 843 fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); 829 844 if (!fi) 830 845 goto out; ··· 853 870 brelse(fibh.sbh); 854 871 855 872 out: 856 - unlock_kernel(); 857 873 return retval; 858 874 } 859 875 ··· 1032 1050 struct fileIdentDesc cfi, *fi; 1033 1051 int err; 1034 1052 1035 - lock_kernel(); 1036 1053 if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) { 1037 - unlock_kernel(); 1038 1054 return -EMLINK; 1039 1055 } 1040 1056 1041 1057 fi = udf_add_entry(dir, dentry, &fibh, &cfi, &err); 1042 1058 if (!fi) { 1043 - unlock_kernel(); 1044 1059 return err; 1045 1060 } 1046 1061 cfi.icb.extLength = cpu_to_le32(inode->i_sb->s_blocksize); ··· 1058 1079 mark_inode_dirty(inode); 1059 1080 ihold(inode); 1060 1081 d_instantiate(dentry, inode); 1061 - unlock_kernel(); 1062 1082 1063 1083 return 0; 1064 1084 } ··· 1078 1100 struct kernel_lb_addr tloc; 1079 1101 struct udf_inode_info *old_iinfo = UDF_I(old_inode); 1080 1102 1081 - lock_kernel(); 1082 1103 ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); 1083 1104 if (ofi) { 1084 1105 if (ofibh.sbh != ofibh.ebh) ··· 1201 1224 brelse(nfibh.ebh); 1202 1225 brelse(nfibh.sbh); 1203 1226 } 1204 - unlock_kernel(); 1205 1227 1206 1228 return retval; 1207 1229 } ··· 1213 1237 struct fileIdentDesc cfi; 1214 1238 struct udf_fileident_bh fibh; 1215 1239 1216 - lock_kernel(); 1217 1240 if (!udf_find_entry(child->d_inode, &dotdot, &fibh, &cfi)) 1218 1241 goto out_unlock; 1219 1242 ··· 1224 1249 inode = udf_iget(child->d_inode->i_sb, &tloc); 1225 1250 if (!inode) 1226 1251 goto out_unlock; 1227 - unlock_kernel(); 1228 1252 1229 1253 return d_obtain_alias(inode); 1230 1254 out_unlock: 1231 - unlock_kernel(); 1232 1255 return ERR_PTR(-EACCES); 1233 1256 } 1234 1257
+1 -8
fs/udf/super.c
··· 48 48 #include <linux/stat.h> 49 49 #include <linux/cdrom.h> 50 50 #include <linux/nls.h> 51 - #include <linux/smp_lock.h> 52 51 #include <linux/buffer_head.h> 53 52 #include <linux/vfs.h> 54 53 #include <linux/vmalloc.h> ··· 1910 1911 struct kernel_lb_addr rootdir, fileset; 1911 1912 struct udf_sb_info *sbi; 1912 1913 1913 - lock_kernel(); 1914 - 1915 1914 uopt.flags = (1 << UDF_FLAG_USE_AD_IN_ICB) | (1 << UDF_FLAG_STRICT); 1916 1915 uopt.uid = -1; 1917 1916 uopt.gid = -1; ··· 1918 1921 uopt.dmode = UDF_INVALID_MODE; 1919 1922 1920 1923 sbi = kzalloc(sizeof(struct udf_sb_info), GFP_KERNEL); 1921 - if (!sbi) { 1922 - unlock_kernel(); 1924 + if (!sbi) 1923 1925 return -ENOMEM; 1924 - } 1925 1926 1926 1927 sb->s_fs_info = sbi; 1927 1928 ··· 2066 2071 goto error_out; 2067 2072 } 2068 2073 sb->s_maxbytes = MAX_LFS_FILESIZE; 2069 - unlock_kernel(); 2070 2074 return 0; 2071 2075 2072 2076 error_out: ··· 2086 2092 kfree(sbi); 2087 2093 sb->s_fs_info = NULL; 2088 2094 2089 - unlock_kernel(); 2090 2095 return -EINVAL; 2091 2096 } 2092 2097