diff options
author | Jan Kara <jack@suse.cz> | 2008-03-04 07:10:29 -0500 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2008-04-17 08:23:03 -0400 |
commit | 9bf2c6b834f4caad82b3e2d962c266153d39e411 (patch) | |
tree | 5386b3eb6dec103815b81e92d5977a59ef5c4ec9 /fs/udf/namei.c | |
parent | 200a3592cda7bfc010d30c0b1eb8eff3791e9ba9 (diff) |
udf: Remove checking of existence of filename in udf_add_entry()
We don't have to check whether a directory entry already exists in a directory
when creating a new one since we've already checked that earlier by lookup and
we are holding directory i_mutex all the time.
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf/namei.c')
-rw-r--r-- | fs/udf/namei.c | 38 |
1 files changed, 1 insertions, 37 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index ac7f72779e93..e9f587201e17 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -303,11 +303,9 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir, | |||
303 | { | 303 | { |
304 | struct super_block *sb = dir->i_sb; | 304 | struct super_block *sb = dir->i_sb; |
305 | struct fileIdentDesc *fi = NULL; | 305 | struct fileIdentDesc *fi = NULL; |
306 | char name[UDF_NAME_LEN], fname[UDF_NAME_LEN]; | 306 | char name[UDF_NAME_LEN]; |
307 | int namelen; | 307 | int namelen; |
308 | loff_t f_pos; | 308 | loff_t f_pos; |
309 | int flen; | ||
310 | char *nameptr; | ||
311 | loff_t size = udf_ext0_offset(dir) + dir->i_size; | 309 | loff_t size = udf_ext0_offset(dir) + dir->i_size; |
312 | int nfidlen; | 310 | int nfidlen; |
313 | uint8_t lfi; | 311 | uint8_t lfi; |
@@ -385,26 +383,6 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir, | |||
385 | liu = le16_to_cpu(cfi->lengthOfImpUse); | 383 | liu = le16_to_cpu(cfi->lengthOfImpUse); |
386 | lfi = cfi->lengthFileIdent; | 384 | lfi = cfi->lengthFileIdent; |
387 | 385 | ||
388 | if (fibh->sbh == fibh->ebh) | ||
389 | nameptr = fi->fileIdent + liu; | ||
390 | else { | ||
391 | int poffset; /* Unpaded ending offset */ | ||
392 | |||
393 | poffset = fibh->soffset + sizeof(struct fileIdentDesc) + | ||
394 | liu + lfi; | ||
395 | |||
396 | if (poffset >= lfi) | ||
397 | nameptr = (char *)(fibh->ebh->b_data + | ||
398 | poffset - lfi); | ||
399 | else { | ||
400 | nameptr = fname; | ||
401 | memcpy(nameptr, fi->fileIdent + liu, | ||
402 | lfi - poffset); | ||
403 | memcpy(nameptr + lfi - poffset, | ||
404 | fibh->ebh->b_data, poffset); | ||
405 | } | ||
406 | } | ||
407 | |||
408 | if ((cfi->fileCharacteristics & FID_FILE_CHAR_DELETED) != 0) { | 386 | if ((cfi->fileCharacteristics & FID_FILE_CHAR_DELETED) != 0) { |
409 | if (((sizeof(struct fileIdentDesc) + | 387 | if (((sizeof(struct fileIdentDesc) + |
410 | liu + lfi + 3) & ~3) == nfidlen) { | 388 | liu + lfi + 3) & ~3) == nfidlen) { |
@@ -423,20 +401,6 @@ static struct fileIdentDesc *udf_add_entry(struct inode *dir, | |||
423 | } | 401 | } |
424 | } | 402 | } |
425 | } | 403 | } |
426 | |||
427 | if (!lfi || !dentry) | ||
428 | continue; | ||
429 | |||
430 | flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi); | ||
431 | if (flen && udf_match(flen, fname, dentry->d_name.len, | ||
432 | dentry->d_name.name)) { | ||
433 | if (fibh->sbh != fibh->ebh) | ||
434 | brelse(fibh->ebh); | ||
435 | brelse(fibh->sbh); | ||
436 | brelse(epos.bh); | ||
437 | *err = -EEXIST; | ||
438 | return NULL; | ||
439 | } | ||
440 | } | 404 | } |
441 | 405 | ||
442 | add: | 406 | add: |