diff options
Diffstat (limited to 'fs/udf')
-rw-r--r-- | fs/udf/namei.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index 102c072c6bbf..5f6fc17d6bc5 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -594,6 +594,29 @@ static int udf_create(struct inode *dir, struct dentry *dentry, umode_t mode, | |||
594 | return 0; | 594 | return 0; |
595 | } | 595 | } |
596 | 596 | ||
597 | static int udf_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) | ||
598 | { | ||
599 | struct inode *inode; | ||
600 | struct udf_inode_info *iinfo; | ||
601 | int err; | ||
602 | |||
603 | inode = udf_new_inode(dir, mode, &err); | ||
604 | if (!inode) | ||
605 | return err; | ||
606 | |||
607 | iinfo = UDF_I(inode); | ||
608 | if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) | ||
609 | inode->i_data.a_ops = &udf_adinicb_aops; | ||
610 | else | ||
611 | inode->i_data.a_ops = &udf_aops; | ||
612 | inode->i_op = &udf_file_inode_operations; | ||
613 | inode->i_fop = &udf_file_operations; | ||
614 | mark_inode_dirty(inode); | ||
615 | |||
616 | d_tmpfile(dentry, inode); | ||
617 | return 0; | ||
618 | } | ||
619 | |||
597 | static int udf_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, | 620 | static int udf_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, |
598 | dev_t rdev) | 621 | dev_t rdev) |
599 | { | 622 | { |
@@ -1311,6 +1334,7 @@ const struct inode_operations udf_dir_inode_operations = { | |||
1311 | .rmdir = udf_rmdir, | 1334 | .rmdir = udf_rmdir, |
1312 | .mknod = udf_mknod, | 1335 | .mknod = udf_mknod, |
1313 | .rename = udf_rename, | 1336 | .rename = udf_rename, |
1337 | .tmpfile = udf_tmpfile, | ||
1314 | }; | 1338 | }; |
1315 | const struct inode_operations udf_symlink_inode_operations = { | 1339 | const struct inode_operations udf_symlink_inode_operations = { |
1316 | .readlink = generic_readlink, | 1340 | .readlink = generic_readlink, |