diff options
Diffstat (limited to 'fs/xfs/xfs_dir2.c')
| -rw-r--r-- | fs/xfs/xfs_dir2.c | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c index e92e73f0e6af..7cb26529766b 100644 --- a/fs/xfs/xfs_dir2.c +++ b/fs/xfs/xfs_dir2.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include "xfs_error.h" | 44 | #include "xfs_error.h" |
| 45 | #include "xfs_vnodeops.h" | 45 | #include "xfs_vnodeops.h" |
| 46 | 46 | ||
| 47 | struct xfs_name xfs_name_dotdot = {"..", 2}; | ||
| 47 | 48 | ||
| 48 | void | 49 | void |
| 49 | xfs_dir_mount( | 50 | xfs_dir_mount( |
| @@ -146,8 +147,7 @@ int | |||
| 146 | xfs_dir_createname( | 147 | xfs_dir_createname( |
| 147 | xfs_trans_t *tp, | 148 | xfs_trans_t *tp, |
| 148 | xfs_inode_t *dp, | 149 | xfs_inode_t *dp, |
| 149 | char *name, | 150 | struct xfs_name *name, |
| 150 | int namelen, | ||
| 151 | xfs_ino_t inum, /* new entry inode number */ | 151 | xfs_ino_t inum, /* new entry inode number */ |
| 152 | xfs_fsblock_t *first, /* bmap's firstblock */ | 152 | xfs_fsblock_t *first, /* bmap's firstblock */ |
| 153 | xfs_bmap_free_t *flist, /* bmap's freeblock list */ | 153 | xfs_bmap_free_t *flist, /* bmap's freeblock list */ |
| @@ -162,9 +162,9 @@ xfs_dir_createname( | |||
| 162 | return rval; | 162 | return rval; |
| 163 | XFS_STATS_INC(xs_dir_create); | 163 | XFS_STATS_INC(xs_dir_create); |
| 164 | 164 | ||
| 165 | args.name = name; | 165 | args.name = name->name; |
| 166 | args.namelen = namelen; | 166 | args.namelen = name->len; |
| 167 | args.hashval = xfs_da_hashname(name, namelen); | 167 | args.hashval = xfs_da_hashname(name->name, name->len); |
| 168 | args.inumber = inum; | 168 | args.inumber = inum; |
| 169 | args.dp = dp; | 169 | args.dp = dp; |
| 170 | args.firstblock = first; | 170 | args.firstblock = first; |
| @@ -197,8 +197,7 @@ int | |||
| 197 | xfs_dir_lookup( | 197 | xfs_dir_lookup( |
| 198 | xfs_trans_t *tp, | 198 | xfs_trans_t *tp, |
| 199 | xfs_inode_t *dp, | 199 | xfs_inode_t *dp, |
| 200 | char *name, | 200 | struct xfs_name *name, |
| 201 | int namelen, | ||
| 202 | xfs_ino_t *inum) /* out: inode number */ | 201 | xfs_ino_t *inum) /* out: inode number */ |
| 203 | { | 202 | { |
| 204 | xfs_da_args_t args; | 203 | xfs_da_args_t args; |
| @@ -207,18 +206,14 @@ xfs_dir_lookup( | |||
| 207 | 206 | ||
| 208 | ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); | 207 | ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); |
| 209 | XFS_STATS_INC(xs_dir_lookup); | 208 | XFS_STATS_INC(xs_dir_lookup); |
| 209 | memset(&args, 0, sizeof(xfs_da_args_t)); | ||
| 210 | 210 | ||
| 211 | args.name = name; | 211 | args.name = name->name; |
| 212 | args.namelen = namelen; | 212 | args.namelen = name->len; |
| 213 | args.hashval = xfs_da_hashname(name, namelen); | 213 | args.hashval = xfs_da_hashname(name->name, name->len); |
| 214 | args.inumber = 0; | ||
| 215 | args.dp = dp; | 214 | args.dp = dp; |
| 216 | args.firstblock = NULL; | ||
| 217 | args.flist = NULL; | ||
| 218 | args.total = 0; | ||
| 219 | args.whichfork = XFS_DATA_FORK; | 215 | args.whichfork = XFS_DATA_FORK; |
| 220 | args.trans = tp; | 216 | args.trans = tp; |
| 221 | args.justcheck = args.addname = 0; | ||
| 222 | args.oknoent = 1; | 217 | args.oknoent = 1; |
| 223 | 218 | ||
| 224 | if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) | 219 | if (dp->i_d.di_format == XFS_DINODE_FMT_LOCAL) |
| @@ -247,8 +242,7 @@ int | |||
| 247 | xfs_dir_removename( | 242 | xfs_dir_removename( |
| 248 | xfs_trans_t *tp, | 243 | xfs_trans_t *tp, |
| 249 | xfs_inode_t *dp, | 244 | xfs_inode_t *dp, |
| 250 | char *name, | 245 | struct xfs_name *name, |
| 251 | int namelen, | ||
| 252 | xfs_ino_t ino, | 246 | xfs_ino_t ino, |
| 253 | xfs_fsblock_t *first, /* bmap's firstblock */ | 247 | xfs_fsblock_t *first, /* bmap's firstblock */ |
| 254 | xfs_bmap_free_t *flist, /* bmap's freeblock list */ | 248 | xfs_bmap_free_t *flist, /* bmap's freeblock list */ |
| @@ -261,9 +255,9 @@ xfs_dir_removename( | |||
| 261 | ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); | 255 | ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); |
| 262 | XFS_STATS_INC(xs_dir_remove); | 256 | XFS_STATS_INC(xs_dir_remove); |
| 263 | 257 | ||
| 264 | args.name = name; | 258 | args.name = name->name; |
| 265 | args.namelen = namelen; | 259 | args.namelen = name->len; |
| 266 | args.hashval = xfs_da_hashname(name, namelen); | 260 | args.hashval = xfs_da_hashname(name->name, name->len); |
| 267 | args.inumber = ino; | 261 | args.inumber = ino; |
| 268 | args.dp = dp; | 262 | args.dp = dp; |
| 269 | args.firstblock = first; | 263 | args.firstblock = first; |
| @@ -329,8 +323,7 @@ int | |||
| 329 | xfs_dir_replace( | 323 | xfs_dir_replace( |
| 330 | xfs_trans_t *tp, | 324 | xfs_trans_t *tp, |
| 331 | xfs_inode_t *dp, | 325 | xfs_inode_t *dp, |
| 332 | char *name, /* name of entry to replace */ | 326 | struct xfs_name *name, /* name of entry to replace */ |
| 333 | int namelen, | ||
| 334 | xfs_ino_t inum, /* new inode number */ | 327 | xfs_ino_t inum, /* new inode number */ |
| 335 | xfs_fsblock_t *first, /* bmap's firstblock */ | 328 | xfs_fsblock_t *first, /* bmap's firstblock */ |
| 336 | xfs_bmap_free_t *flist, /* bmap's freeblock list */ | 329 | xfs_bmap_free_t *flist, /* bmap's freeblock list */ |
| @@ -345,9 +338,9 @@ xfs_dir_replace( | |||
| 345 | if ((rval = xfs_dir_ino_validate(tp->t_mountp, inum))) | 338 | if ((rval = xfs_dir_ino_validate(tp->t_mountp, inum))) |
| 346 | return rval; | 339 | return rval; |
| 347 | 340 | ||
| 348 | args.name = name; | 341 | args.name = name->name; |
| 349 | args.namelen = namelen; | 342 | args.namelen = name->len; |
| 350 | args.hashval = xfs_da_hashname(name, namelen); | 343 | args.hashval = xfs_da_hashname(name->name, name->len); |
| 351 | args.inumber = inum; | 344 | args.inumber = inum; |
| 352 | args.dp = dp; | 345 | args.dp = dp; |
| 353 | args.firstblock = first; | 346 | args.firstblock = first; |
| @@ -374,28 +367,29 @@ xfs_dir_replace( | |||
| 374 | 367 | ||
| 375 | /* | 368 | /* |
| 376 | * See if this entry can be added to the directory without allocating space. | 369 | * See if this entry can be added to the directory without allocating space. |
| 370 | * First checks that the caller couldn't reserve enough space (resblks = 0). | ||
| 377 | */ | 371 | */ |
| 378 | int | 372 | int |
| 379 | xfs_dir_canenter( | 373 | xfs_dir_canenter( |
| 380 | xfs_trans_t *tp, | 374 | xfs_trans_t *tp, |
| 381 | xfs_inode_t *dp, | 375 | xfs_inode_t *dp, |
| 382 | char *name, /* name of entry to add */ | 376 | struct xfs_name *name, /* name of entry to add */ |
| 383 | int namelen) | 377 | uint resblks) |
| 384 | { | 378 | { |
| 385 | xfs_da_args_t args; | 379 | xfs_da_args_t args; |
| 386 | int rval; | 380 | int rval; |
| 387 | int v; /* type-checking value */ | 381 | int v; /* type-checking value */ |
| 388 | 382 | ||
| 383 | if (resblks) | ||
| 384 | return 0; | ||
| 385 | |||
| 389 | ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); | 386 | ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); |
| 387 | memset(&args, 0, sizeof(xfs_da_args_t)); | ||
| 390 | 388 | ||
| 391 | args.name = name; | 389 | args.name = name->name; |
| 392 | args.namelen = namelen; | 390 | args.namelen = name->len; |
| 393 | args.hashval = xfs_da_hashname(name, namelen); | 391 | args.hashval = xfs_da_hashname(name->name, name->len); |
| 394 | args.inumber = 0; | ||
| 395 | args.dp = dp; | 392 | args.dp = dp; |
| 396 | args.firstblock = NULL; | ||
| 397 | args.flist = NULL; | ||
| 398 | args.total = 0; | ||
| 399 | args.whichfork = XFS_DATA_FORK; | 393 | args.whichfork = XFS_DATA_FORK; |
| 400 | args.trans = tp; | 394 | args.trans = tp; |
| 401 | args.justcheck = args.addname = args.oknoent = 1; | 395 | args.justcheck = args.addname = args.oknoent = 1; |
