aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_iops.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_iops.c')
-rw-r--r--fs/xfs/xfs_iops.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
index 6d7e9e2d7651..2b8952d9199b 100644
--- a/fs/xfs/xfs_iops.c
+++ b/fs/xfs/xfs_iops.c
@@ -40,6 +40,9 @@
40#include "xfs_trace.h" 40#include "xfs_trace.h"
41#include "xfs_icache.h" 41#include "xfs_icache.h"
42#include "xfs_symlink.h" 42#include "xfs_symlink.h"
43#include "xfs_da_btree.h"
44#include "xfs_dir2_format.h"
45#include "xfs_dir2_priv.h"
43 46
44#include <linux/capability.h> 47#include <linux/capability.h>
45#include <linux/xattr.h> 48#include <linux/xattr.h>
@@ -88,10 +91,12 @@ xfs_init_security(
88static void 91static void
89xfs_dentry_to_name( 92xfs_dentry_to_name(
90 struct xfs_name *namep, 93 struct xfs_name *namep,
91 struct dentry *dentry) 94 struct dentry *dentry,
95 int mode)
92{ 96{
93 namep->name = dentry->d_name.name; 97 namep->name = dentry->d_name.name;
94 namep->len = dentry->d_name.len; 98 namep->len = dentry->d_name.len;
99 namep->type = xfs_mode_to_ftype[(mode & S_IFMT) >> S_SHIFT];
95} 100}
96 101
97STATIC void 102STATIC void
@@ -107,7 +112,7 @@ xfs_cleanup_inode(
107 * xfs_init_security we must back out. 112 * xfs_init_security we must back out.
108 * ENOSPC can hit here, among other things. 113 * ENOSPC can hit here, among other things.
109 */ 114 */
110 xfs_dentry_to_name(&teardown, dentry); 115 xfs_dentry_to_name(&teardown, dentry, 0);
111 116
112 xfs_remove(XFS_I(dir), &teardown, XFS_I(inode)); 117 xfs_remove(XFS_I(dir), &teardown, XFS_I(inode));
113 iput(inode); 118 iput(inode);
@@ -147,7 +152,7 @@ xfs_vn_mknod(
147 mode &= ~current_umask(); 152 mode &= ~current_umask();
148 } 153 }
149 154
150 xfs_dentry_to_name(&name, dentry); 155 xfs_dentry_to_name(&name, dentry, mode);
151 error = xfs_create(XFS_I(dir), &name, mode, rdev, &ip); 156 error = xfs_create(XFS_I(dir), &name, mode, rdev, &ip);
152 if (unlikely(error)) 157 if (unlikely(error))
153 goto out_free_acl; 158 goto out_free_acl;
@@ -208,7 +213,7 @@ xfs_vn_lookup(
208 if (dentry->d_name.len >= MAXNAMELEN) 213 if (dentry->d_name.len >= MAXNAMELEN)
209 return ERR_PTR(-ENAMETOOLONG); 214 return ERR_PTR(-ENAMETOOLONG);
210 215
211 xfs_dentry_to_name(&name, dentry); 216 xfs_dentry_to_name(&name, dentry, 0);
212 error = xfs_lookup(XFS_I(dir), &name, &cip, NULL); 217 error = xfs_lookup(XFS_I(dir), &name, &cip, NULL);
213 if (unlikely(error)) { 218 if (unlikely(error)) {
214 if (unlikely(error != ENOENT)) 219 if (unlikely(error != ENOENT))
@@ -235,7 +240,7 @@ xfs_vn_ci_lookup(
235 if (dentry->d_name.len >= MAXNAMELEN) 240 if (dentry->d_name.len >= MAXNAMELEN)
236 return ERR_PTR(-ENAMETOOLONG); 241 return ERR_PTR(-ENAMETOOLONG);
237 242
238 xfs_dentry_to_name(&xname, dentry); 243 xfs_dentry_to_name(&xname, dentry, 0);
239 error = xfs_lookup(XFS_I(dir), &xname, &ip, &ci_name); 244 error = xfs_lookup(XFS_I(dir), &xname, &ip, &ci_name);
240 if (unlikely(error)) { 245 if (unlikely(error)) {
241 if (unlikely(error != ENOENT)) 246 if (unlikely(error != ENOENT))
@@ -270,7 +275,7 @@ xfs_vn_link(
270 struct xfs_name name; 275 struct xfs_name name;
271 int error; 276 int error;
272 277
273 xfs_dentry_to_name(&name, dentry); 278 xfs_dentry_to_name(&name, dentry, inode->i_mode);
274 279
275 error = xfs_link(XFS_I(dir), XFS_I(inode), &name); 280 error = xfs_link(XFS_I(dir), XFS_I(inode), &name);
276 if (unlikely(error)) 281 if (unlikely(error))
@@ -289,7 +294,7 @@ xfs_vn_unlink(
289 struct xfs_name name; 294 struct xfs_name name;
290 int error; 295 int error;
291 296
292 xfs_dentry_to_name(&name, dentry); 297 xfs_dentry_to_name(&name, dentry, 0);
293 298
294 error = -xfs_remove(XFS_I(dir), &name, XFS_I(dentry->d_inode)); 299 error = -xfs_remove(XFS_I(dir), &name, XFS_I(dentry->d_inode));
295 if (error) 300 if (error)
@@ -319,7 +324,7 @@ xfs_vn_symlink(
319 324
320 mode = S_IFLNK | 325 mode = S_IFLNK |
321 (irix_symlink_mode ? 0777 & ~current_umask() : S_IRWXUGO); 326 (irix_symlink_mode ? 0777 & ~current_umask() : S_IRWXUGO);
322 xfs_dentry_to_name(&name, dentry); 327 xfs_dentry_to_name(&name, dentry, mode);
323 328
324 error = xfs_symlink(XFS_I(dir), &name, symname, mode, &cip); 329 error = xfs_symlink(XFS_I(dir), &name, symname, mode, &cip);
325 if (unlikely(error)) 330 if (unlikely(error))
@@ -351,12 +356,12 @@ xfs_vn_rename(
351 struct xfs_name oname; 356 struct xfs_name oname;
352 struct xfs_name nname; 357 struct xfs_name nname;
353 358
354 xfs_dentry_to_name(&oname, odentry); 359 xfs_dentry_to_name(&oname, odentry, 0);
355 xfs_dentry_to_name(&nname, ndentry); 360 xfs_dentry_to_name(&nname, ndentry, odentry->d_inode->i_mode);
356 361
357 return -xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode), 362 return -xfs_rename(XFS_I(odir), &oname, XFS_I(odentry->d_inode),
358 XFS_I(ndir), &nname, new_inode ? 363 XFS_I(ndir), &nname, new_inode ?
359 XFS_I(new_inode) : NULL); 364 XFS_I(new_inode) : NULL);
360} 365}
361 366
362/* 367/*