diff options
Diffstat (limited to 'fs/udf/namei.c')
| -rw-r--r-- | fs/udf/namei.c | 37 | 
1 files changed, 27 insertions, 10 deletions
| diff --git a/fs/udf/namei.c b/fs/udf/namei.c index cd2115060fdc..db423ab078b1 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
| @@ -34,8 +34,8 @@ | |||
| 34 | #include <linux/crc-itu-t.h> | 34 | #include <linux/crc-itu-t.h> | 
| 35 | #include <linux/exportfs.h> | 35 | #include <linux/exportfs.h> | 
| 36 | 36 | ||
| 37 | static inline int udf_match(int len1, const char *name1, int len2, | 37 | static inline int udf_match(int len1, const unsigned char *name1, int len2, | 
| 38 | const char *name2) | 38 | const unsigned char *name2) | 
| 39 | { | 39 | { | 
| 40 | if (len1 != len2) | 40 | if (len1 != len2) | 
| 41 | return 0; | 41 | return 0; | 
| @@ -142,15 +142,15 @@ int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi, | |||
| 142 | } | 142 | } | 
| 143 | 143 | ||
| 144 | static struct fileIdentDesc *udf_find_entry(struct inode *dir, | 144 | static struct fileIdentDesc *udf_find_entry(struct inode *dir, | 
| 145 | struct qstr *child, | 145 | const struct qstr *child, | 
| 146 | struct udf_fileident_bh *fibh, | 146 | struct udf_fileident_bh *fibh, | 
| 147 | struct fileIdentDesc *cfi) | 147 | struct fileIdentDesc *cfi) | 
| 148 | { | 148 | { | 
| 149 | struct fileIdentDesc *fi = NULL; | 149 | struct fileIdentDesc *fi = NULL; | 
| 150 | loff_t f_pos; | 150 | loff_t f_pos; | 
| 151 | int block, flen; | 151 | int block, flen; | 
| 152 | char *fname = NULL; | 152 | unsigned char *fname = NULL; | 
| 153 | char *nameptr; | 153 | unsigned char *nameptr; | 
| 154 | uint8_t lfi; | 154 | uint8_t lfi; | 
| 155 | uint16_t liu; | 155 | uint16_t liu; | 
| 156 | loff_t size; | 156 | loff_t size; | 
| @@ -308,7 +308,7 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir, | |||
| 308 | { | 308 | { | 
| 309 | struct super_block *sb = dir->i_sb; | 309 | struct super_block *sb = dir->i_sb; | 
| 310 | struct fileIdentDesc *fi = NULL; | 310 | struct fileIdentDesc *fi = NULL; | 
| 311 | char *name = NULL; | 311 | unsigned char *name = NULL; | 
| 312 | int namelen; | 312 | int namelen; | 
| 313 | loff_t f_pos; | 313 | loff_t f_pos; | 
| 314 | loff_t size = udf_ext0_offset(dir) + dir->i_size; | 314 | loff_t size = udf_ext0_offset(dir) + dir->i_size; | 
| @@ -563,6 +563,8 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode, | |||
| 563 | int err; | 563 | int err; | 
| 564 | struct udf_inode_info *iinfo; | 564 | struct udf_inode_info *iinfo; | 
| 565 | 565 | ||
| 566 | dquot_initialize(dir); | ||
| 567 | |||
| 566 | lock_kernel(); | 568 | lock_kernel(); | 
| 567 | inode = udf_new_inode(dir, mode, &err); | 569 | inode = udf_new_inode(dir, mode, &err); | 
| 568 | if (!inode) { | 570 | if (!inode) { | 
| @@ -616,6 +618,8 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
| 616 | if (!old_valid_dev(rdev)) | 618 | if (!old_valid_dev(rdev)) | 
| 617 | return -EINVAL; | 619 | return -EINVAL; | 
| 618 | 620 | ||
| 621 | dquot_initialize(dir); | ||
| 622 | |||
| 619 | lock_kernel(); | 623 | lock_kernel(); | 
| 620 | err = -EIO; | 624 | err = -EIO; | 
| 621 | inode = udf_new_inode(dir, mode, &err); | 625 | inode = udf_new_inode(dir, mode, &err); | 
| @@ -662,6 +666,8 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
| 662 | struct udf_inode_info *dinfo = UDF_I(dir); | 666 | struct udf_inode_info *dinfo = UDF_I(dir); | 
| 663 | struct udf_inode_info *iinfo; | 667 | struct udf_inode_info *iinfo; | 
| 664 | 668 | ||
| 669 | dquot_initialize(dir); | ||
| 670 | |||
| 665 | lock_kernel(); | 671 | lock_kernel(); | 
| 666 | err = -EMLINK; | 672 | err = -EMLINK; | 
| 667 | if (dir->i_nlink >= (256 << sizeof(dir->i_nlink)) - 1) | 673 | if (dir->i_nlink >= (256 << sizeof(dir->i_nlink)) - 1) | 
| @@ -799,6 +805,8 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry) | |||
| 799 | struct fileIdentDesc *fi, cfi; | 805 | struct fileIdentDesc *fi, cfi; | 
| 800 | struct kernel_lb_addr tloc; | 806 | struct kernel_lb_addr tloc; | 
| 801 | 807 | ||
| 808 | dquot_initialize(dir); | ||
| 809 | |||
| 802 | retval = -ENOENT; | 810 | retval = -ENOENT; | 
| 803 | lock_kernel(); | 811 | lock_kernel(); | 
| 804 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); | 812 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); | 
| @@ -845,6 +853,8 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry) | |||
| 845 | struct fileIdentDesc cfi; | 853 | struct fileIdentDesc cfi; | 
| 846 | struct kernel_lb_addr tloc; | 854 | struct kernel_lb_addr tloc; | 
| 847 | 855 | ||
| 856 | dquot_initialize(dir); | ||
| 857 | |||
| 848 | retval = -ENOENT; | 858 | retval = -ENOENT; | 
| 849 | lock_kernel(); | 859 | lock_kernel(); | 
| 850 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); | 860 | fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); | 
| @@ -885,20 +895,22 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, | |||
| 885 | { | 895 | { | 
| 886 | struct inode *inode; | 896 | struct inode *inode; | 
| 887 | struct pathComponent *pc; | 897 | struct pathComponent *pc; | 
| 888 | char *compstart; | 898 | const char *compstart; | 
| 889 | struct udf_fileident_bh fibh; | 899 | struct udf_fileident_bh fibh; | 
| 890 | struct extent_position epos = {}; | 900 | struct extent_position epos = {}; | 
| 891 | int eoffset, elen = 0; | 901 | int eoffset, elen = 0; | 
| 892 | struct fileIdentDesc *fi; | 902 | struct fileIdentDesc *fi; | 
| 893 | struct fileIdentDesc cfi; | 903 | struct fileIdentDesc cfi; | 
| 894 | char *ea; | 904 | uint8_t *ea; | 
| 895 | int err; | 905 | int err; | 
| 896 | int block; | 906 | int block; | 
| 897 | char *name = NULL; | 907 | unsigned char *name = NULL; | 
| 898 | int namelen; | 908 | int namelen; | 
| 899 | struct buffer_head *bh; | 909 | struct buffer_head *bh; | 
| 900 | struct udf_inode_info *iinfo; | 910 | struct udf_inode_info *iinfo; | 
| 901 | 911 | ||
| 912 | dquot_initialize(dir); | ||
| 913 | |||
| 902 | lock_kernel(); | 914 | lock_kernel(); | 
| 903 | inode = udf_new_inode(dir, S_IFLNK, &err); | 915 | inode = udf_new_inode(dir, S_IFLNK, &err); | 
| 904 | if (!inode) | 916 | if (!inode) | 
| @@ -970,7 +982,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, | |||
| 970 | 982 | ||
| 971 | pc = (struct pathComponent *)(ea + elen); | 983 | pc = (struct pathComponent *)(ea + elen); | 
| 972 | 984 | ||
| 973 | compstart = (char *)symname; | 985 | compstart = symname; | 
| 974 | 986 | ||
| 975 | do { | 987 | do { | 
| 976 | symname++; | 988 | symname++; | 
| @@ -1069,6 +1081,8 @@ static int udf_link(struct dentry *old_dentry, struct inode *dir, | |||
| 1069 | int err; | 1081 | int err; | 
| 1070 | struct buffer_head *bh; | 1082 | struct buffer_head *bh; | 
| 1071 | 1083 | ||
| 1084 | dquot_initialize(dir); | ||
| 1085 | |||
| 1072 | lock_kernel(); | 1086 | lock_kernel(); | 
| 1073 | if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) { | 1087 | if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) { | 
| 1074 | unlock_kernel(); | 1088 | unlock_kernel(); | 
| @@ -1131,6 +1145,9 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
| 1131 | struct kernel_lb_addr tloc; | 1145 | struct kernel_lb_addr tloc; | 
| 1132 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); | 1146 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); | 
| 1133 | 1147 | ||
| 1148 | dquot_initialize(old_dir); | ||
| 1149 | dquot_initialize(new_dir); | ||
| 1150 | |||
| 1134 | lock_kernel(); | 1151 | lock_kernel(); | 
| 1135 | ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); | 1152 | ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); | 
| 1136 | if (ofi) { | 1153 | if (ofi) { | 
