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

[PATCH] get rid of on-stack dentry in udf

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 9fbb76ce ad76cbc6

+11 -15
+11 -15
fs/udf/namei.c
··· 142 142 } 143 143 144 144 static struct fileIdentDesc *udf_find_entry(struct inode *dir, 145 - struct dentry *dentry, 145 + struct qstr *child, 146 146 struct udf_fileident_bh *fibh, 147 147 struct fileIdentDesc *cfi) 148 148 { ··· 159 159 sector_t offset; 160 160 struct extent_position epos = {}; 161 161 struct udf_inode_info *dinfo = UDF_I(dir); 162 - int isdotdot = dentry->d_name.len == 2 && 163 - dentry->d_name.name[0] == '.' && dentry->d_name.name[1] == '.'; 162 + int isdotdot = child->len == 2 && 163 + child->name[0] == '.' && child->name[1] == '.'; 164 164 165 165 size = udf_ext0_offset(dir) + dir->i_size; 166 166 f_pos = udf_ext0_offset(dir); ··· 238 238 continue; 239 239 240 240 flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi); 241 - if (flen && udf_match(flen, fname, dentry->d_name.len, 242 - dentry->d_name.name)) 241 + if (flen && udf_match(flen, fname, child->len, child->name)) 243 242 goto out_ok; 244 243 } 245 244 ··· 282 283 } else 283 284 #endif /* UDF_RECOVERY */ 284 285 285 - if (udf_find_entry(dir, dentry, &fibh, &cfi)) { 286 + if (udf_find_entry(dir, &dentry->d_name, &fibh, &cfi)) { 286 287 if (fibh.sbh != fibh.ebh) 287 288 brelse(fibh.ebh); 288 289 brelse(fibh.sbh); ··· 782 783 783 784 retval = -ENOENT; 784 785 lock_kernel(); 785 - fi = udf_find_entry(dir, dentry, &fibh, &cfi); 786 + fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); 786 787 if (!fi) 787 788 goto out; 788 789 ··· 828 829 829 830 retval = -ENOENT; 830 831 lock_kernel(); 831 - fi = udf_find_entry(dir, dentry, &fibh, &cfi); 832 + fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi); 832 833 if (!fi) 833 834 goto out; 834 835 ··· 1112 1113 struct udf_inode_info *old_iinfo = UDF_I(old_inode); 1113 1114 1114 1115 lock_kernel(); 1115 - ofi = udf_find_entry(old_dir, old_dentry, &ofibh, &ocfi); 1116 + ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); 1116 1117 if (ofi) { 1117 1118 if (ofibh.sbh != ofibh.ebh) 1118 1119 brelse(ofibh.ebh); ··· 1123 1124 != old_inode->i_ino) 1124 1125 goto end_rename; 1125 1126 1126 - nfi = udf_find_entry(new_dir, new_dentry, &nfibh, &ncfi); 1127 + nfi = udf_find_entry(new_dir, &new_dentry->d_name, &nfibh, &ncfi); 1127 1128 if (nfi) { 1128 1129 if (!new_inode) { 1129 1130 if (nfibh.sbh != nfibh.ebh) ··· 1191 1192 udf_write_fi(new_dir, &ncfi, nfi, &nfibh, NULL, NULL); 1192 1193 1193 1194 /* The old fid may have moved - find it again */ 1194 - ofi = udf_find_entry(old_dir, old_dentry, &ofibh, &ocfi); 1195 + ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); 1195 1196 udf_delete_entry(old_dir, ofi, &ofibh, &ocfi); 1196 1197 1197 1198 if (new_inode) { ··· 1243 1244 static struct dentry *udf_get_parent(struct dentry *child) 1244 1245 { 1245 1246 struct inode *inode = NULL; 1246 - struct dentry dotdot; 1247 + struct qstr dotdot = {.name = "..", .len = 2}; 1247 1248 struct fileIdentDesc cfi; 1248 1249 struct udf_fileident_bh fibh; 1249 - 1250 - dotdot.d_name.name = ".."; 1251 - dotdot.d_name.len = 2; 1252 1250 1253 1251 lock_kernel(); 1254 1252 if (!udf_find_entry(child->d_inode, &dotdot, &fibh, &cfi))