diff options
| -rw-r--r-- | drivers/staging/lustre/lustre/libcfs/tracefile.c | 4 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/dcache.c | 19 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/dir.c | 9 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/file.c | 146 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/llite_internal.h | 10 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/llite_lib.c | 6 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/llite_mmap.c | 12 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/lloop.c | 7 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/namei.c | 382 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/statahead.c | 33 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/vvp_io.c | 4 | ||||
| -rw-r--r-- | drivers/staging/lustre/lustre/llite/xattr.c | 9 |
12 files changed, 265 insertions, 376 deletions
diff --git a/drivers/staging/lustre/lustre/libcfs/tracefile.c b/drivers/staging/lustre/lustre/libcfs/tracefile.c index 7e3f6a45da00..7561030c96e6 100644 --- a/drivers/staging/lustre/lustre/libcfs/tracefile.c +++ b/drivers/staging/lustre/lustre/libcfs/tracefile.c | |||
| @@ -1025,8 +1025,8 @@ static int tracefiled(void *arg) | |||
| 1025 | 1025 | ||
| 1026 | if (f_pos >= (off_t)cfs_tracefile_size) | 1026 | if (f_pos >= (off_t)cfs_tracefile_size) |
| 1027 | f_pos = 0; | 1027 | f_pos = 0; |
| 1028 | else if (f_pos > i_size_read(filp->f_dentry->d_inode)) | 1028 | else if (f_pos > i_size_read(file_inode(filp))) |
| 1029 | f_pos = i_size_read(filp->f_dentry->d_inode); | 1029 | f_pos = i_size_read(file_inode(filp)); |
| 1030 | 1030 | ||
| 1031 | buf = kmap(tage->page); | 1031 | buf = kmap(tage->page); |
| 1032 | rc = vfs_write(filp, (__force const char __user *)buf, | 1032 | rc = vfs_write(filp, (__force const char __user *)buf, |
diff --git a/drivers/staging/lustre/lustre/llite/dcache.c b/drivers/staging/lustre/lustre/llite/dcache.c index 311907b762bd..f692261e9b5c 100644 --- a/drivers/staging/lustre/lustre/llite/dcache.c +++ b/drivers/staging/lustre/lustre/llite/dcache.c | |||
| @@ -151,10 +151,10 @@ static int ll_ddelete(const struct dentry *de) | |||
| 151 | { | 151 | { |
| 152 | LASSERT(de); | 152 | LASSERT(de); |
| 153 | 153 | ||
| 154 | CDEBUG(D_DENTRY, "%s dentry %.*s (%p, parent %p, inode %p) %s%s\n", | 154 | CDEBUG(D_DENTRY, "%s dentry %pd (%p, parent %p, inode %p) %s%s\n", |
| 155 | d_lustre_invalid((struct dentry *)de) ? "deleting" : "keeping", | 155 | d_lustre_invalid((struct dentry *)de) ? "deleting" : "keeping", |
| 156 | de->d_name.len, de->d_name.name, de, de->d_parent, de->d_inode, | 156 | de, de, de->d_parent, de->d_inode, |
| 157 | d_unhashed((struct dentry *)de) ? "" : "hashed,", | 157 | d_unhashed(de) ? "" : "hashed,", |
| 158 | list_empty(&de->d_subdirs) ? "" : "subdirs"); | 158 | list_empty(&de->d_subdirs) ? "" : "subdirs"); |
| 159 | 159 | ||
| 160 | /* kernel >= 2.6.38 last refcount is decreased after this function. */ | 160 | /* kernel >= 2.6.38 last refcount is decreased after this function. */ |
| @@ -180,8 +180,8 @@ int ll_d_init(struct dentry *de) | |||
| 180 | { | 180 | { |
| 181 | LASSERT(de != NULL); | 181 | LASSERT(de != NULL); |
| 182 | 182 | ||
| 183 | CDEBUG(D_DENTRY, "ldd on dentry %.*s (%p) parent %p inode %p refc %d\n", | 183 | CDEBUG(D_DENTRY, "ldd on dentry %pd (%p) parent %p inode %p refc %d\n", |
| 184 | de->d_name.len, de->d_name.name, de, de->d_parent, de->d_inode, | 184 | de, de, de->d_parent, de->d_inode, |
| 185 | d_count(de)); | 185 | d_count(de)); |
| 186 | 186 | ||
| 187 | if (de->d_fsdata == NULL) { | 187 | if (de->d_fsdata == NULL) { |
| @@ -259,9 +259,8 @@ void ll_invalidate_aliases(struct inode *inode) | |||
| 259 | 259 | ||
| 260 | ll_lock_dcache(inode); | 260 | ll_lock_dcache(inode); |
| 261 | ll_d_hlist_for_each_entry(dentry, p, &inode->i_dentry, d_u.d_alias) { | 261 | ll_d_hlist_for_each_entry(dentry, p, &inode->i_dentry, d_u.d_alias) { |
| 262 | CDEBUG(D_DENTRY, "dentry in drop %.*s (%p) parent %p " | 262 | CDEBUG(D_DENTRY, "dentry in drop %pd (%p) parent %p " |
| 263 | "inode %p flags %d\n", dentry->d_name.len, | 263 | "inode %p flags %d\n", dentry, dentry, dentry->d_parent, |
| 264 | dentry->d_name.name, dentry, dentry->d_parent, | ||
| 265 | dentry->d_inode, dentry->d_flags); | 264 | dentry->d_inode, dentry->d_flags); |
| 266 | 265 | ||
| 267 | if (unlikely(dentry == dentry->d_sb->s_root)) { | 266 | if (unlikely(dentry == dentry->d_sb->s_root)) { |
| @@ -352,8 +351,8 @@ static int ll_revalidate_nd(struct dentry *dentry, unsigned int flags) | |||
| 352 | { | 351 | { |
| 353 | int rc; | 352 | int rc; |
| 354 | 353 | ||
| 355 | CDEBUG(D_VFSTRACE, "VFS Op:name=%s, flags=%u\n", | 354 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd, flags=%u\n", |
| 356 | dentry->d_name.name, flags); | 355 | dentry, flags); |
| 357 | 356 | ||
| 358 | rc = ll_revalidate_dentry(dentry, flags); | 357 | rc = ll_revalidate_dentry(dentry, flags); |
| 359 | return rc; | 358 | return rc; |
diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c index b0bb7095dde5..a79fd65ec4c6 100644 --- a/drivers/staging/lustre/lustre/llite/dir.c +++ b/drivers/staging/lustre/lustre/llite/dir.c | |||
| @@ -593,7 +593,7 @@ int ll_dir_read(struct inode *inode, struct dir_context *ctx) | |||
| 593 | 593 | ||
| 594 | static int ll_readdir(struct file *filp, struct dir_context *ctx) | 594 | static int ll_readdir(struct file *filp, struct dir_context *ctx) |
| 595 | { | 595 | { |
| 596 | struct inode *inode = filp->f_dentry->d_inode; | 596 | struct inode *inode = file_inode(filp); |
| 597 | struct ll_file_data *lfd = LUSTRE_FPRIVATE(filp); | 597 | struct ll_file_data *lfd = LUSTRE_FPRIVATE(filp); |
| 598 | struct ll_sb_info *sbi = ll_i2sbi(inode); | 598 | struct ll_sb_info *sbi = ll_i2sbi(inode); |
| 599 | int hash64 = sbi->ll_flags & LL_SBI_64BIT_HASH; | 599 | int hash64 = sbi->ll_flags & LL_SBI_64BIT_HASH; |
| @@ -1242,7 +1242,7 @@ ll_getname(const char __user *filename) | |||
| 1242 | 1242 | ||
| 1243 | static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | 1243 | static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 1244 | { | 1244 | { |
| 1245 | struct inode *inode = file->f_dentry->d_inode; | 1245 | struct inode *inode = file_inode(file); |
| 1246 | struct ll_sb_info *sbi = ll_i2sbi(inode); | 1246 | struct ll_sb_info *sbi = ll_i2sbi(inode); |
| 1247 | struct obd_ioctl_data *data; | 1247 | struct obd_ioctl_data *data; |
| 1248 | int rc = 0; | 1248 | int rc = 0; |
| @@ -1389,7 +1389,7 @@ lmv_out_free: | |||
| 1389 | return -EFAULT; | 1389 | return -EFAULT; |
| 1390 | } | 1390 | } |
| 1391 | 1391 | ||
| 1392 | if (inode->i_sb->s_root == file->f_dentry) | 1392 | if (is_root_inode(inode)) |
| 1393 | set_default = 1; | 1393 | set_default = 1; |
| 1394 | 1394 | ||
| 1395 | /* in v1 and v3 cases lumv1 points to data */ | 1395 | /* in v1 and v3 cases lumv1 points to data */ |
| @@ -1780,8 +1780,7 @@ out_quotactl: | |||
| 1780 | return ll_flush_ctx(inode); | 1780 | return ll_flush_ctx(inode); |
| 1781 | #ifdef CONFIG_FS_POSIX_ACL | 1781 | #ifdef CONFIG_FS_POSIX_ACL |
| 1782 | case LL_IOC_RMTACL: { | 1782 | case LL_IOC_RMTACL: { |
| 1783 | if (sbi->ll_flags & LL_SBI_RMT_CLIENT && | 1783 | if (sbi->ll_flags & LL_SBI_RMT_CLIENT && is_root_inode(inode)) { |
| 1784 | inode == inode->i_sb->s_root->d_inode) { | ||
| 1785 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); | 1784 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); |
| 1786 | 1785 | ||
| 1787 | LASSERT(fd != NULL); | 1786 | LASSERT(fd != NULL); |
diff --git a/drivers/staging/lustre/lustre/llite/file.c b/drivers/staging/lustre/lustre/llite/file.c index 08e77492da8f..a2ae9a68a9a0 100644 --- a/drivers/staging/lustre/lustre/llite/file.c +++ b/drivers/staging/lustre/lustre/llite/file.c | |||
| @@ -266,6 +266,10 @@ static int ll_md_close(struct obd_export *md_exp, struct inode *inode, | |||
| 266 | { | 266 | { |
| 267 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); | 267 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); |
| 268 | struct ll_inode_info *lli = ll_i2info(inode); | 268 | struct ll_inode_info *lli = ll_i2info(inode); |
| 269 | int lockmode; | ||
| 270 | __u64 flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_TEST_LOCK; | ||
| 271 | struct lustre_handle lockh; | ||
| 272 | ldlm_policy_data_t policy = {.l_inodebits={MDS_INODELOCK_OPEN}}; | ||
| 269 | int rc = 0; | 273 | int rc = 0; |
| 270 | 274 | ||
| 271 | /* clear group lock, if present */ | 275 | /* clear group lock, if present */ |
| @@ -292,39 +296,26 @@ static int ll_md_close(struct obd_export *md_exp, struct inode *inode, | |||
| 292 | 296 | ||
| 293 | /* Let's see if we have good enough OPEN lock on the file and if | 297 | /* Let's see if we have good enough OPEN lock on the file and if |
| 294 | we can skip talking to MDS */ | 298 | we can skip talking to MDS */ |
| 295 | if (file->f_dentry->d_inode) { /* Can this ever be false? */ | ||
| 296 | int lockmode; | ||
| 297 | __u64 flags = LDLM_FL_BLOCK_GRANTED | LDLM_FL_TEST_LOCK; | ||
| 298 | struct lustre_handle lockh; | ||
| 299 | struct inode *inode = file->f_dentry->d_inode; | ||
| 300 | ldlm_policy_data_t policy = {.l_inodebits={MDS_INODELOCK_OPEN}}; | ||
| 301 | |||
| 302 | mutex_lock(&lli->lli_och_mutex); | ||
| 303 | if (fd->fd_omode & FMODE_WRITE) { | ||
| 304 | lockmode = LCK_CW; | ||
| 305 | LASSERT(lli->lli_open_fd_write_count); | ||
| 306 | lli->lli_open_fd_write_count--; | ||
| 307 | } else if (fd->fd_omode & FMODE_EXEC) { | ||
| 308 | lockmode = LCK_PR; | ||
| 309 | LASSERT(lli->lli_open_fd_exec_count); | ||
| 310 | lli->lli_open_fd_exec_count--; | ||
| 311 | } else { | ||
| 312 | lockmode = LCK_CR; | ||
| 313 | LASSERT(lli->lli_open_fd_read_count); | ||
| 314 | lli->lli_open_fd_read_count--; | ||
| 315 | } | ||
| 316 | mutex_unlock(&lli->lli_och_mutex); | ||
| 317 | 299 | ||
| 318 | if (!md_lock_match(md_exp, flags, ll_inode2fid(inode), | 300 | mutex_lock(&lli->lli_och_mutex); |
| 319 | LDLM_IBITS, &policy, lockmode, | 301 | if (fd->fd_omode & FMODE_WRITE) { |
| 320 | &lockh)) { | 302 | lockmode = LCK_CW; |
| 321 | rc = ll_md_real_close(file->f_dentry->d_inode, | 303 | LASSERT(lli->lli_open_fd_write_count); |
| 322 | fd->fd_omode); | 304 | lli->lli_open_fd_write_count--; |
| 323 | } | 305 | } else if (fd->fd_omode & FMODE_EXEC) { |
| 306 | lockmode = LCK_PR; | ||
| 307 | LASSERT(lli->lli_open_fd_exec_count); | ||
| 308 | lli->lli_open_fd_exec_count--; | ||
| 324 | } else { | 309 | } else { |
| 325 | CERROR("Releasing a file %p with negative dentry %p. Name %s", | 310 | lockmode = LCK_CR; |
| 326 | file, file->f_dentry, file->f_dentry->d_name.name); | 311 | LASSERT(lli->lli_open_fd_read_count); |
| 312 | lli->lli_open_fd_read_count--; | ||
| 327 | } | 313 | } |
| 314 | mutex_unlock(&lli->lli_och_mutex); | ||
| 315 | |||
| 316 | if (!md_lock_match(md_exp, flags, ll_inode2fid(inode), | ||
| 317 | LDLM_IBITS, &policy, lockmode, &lockh)) | ||
| 318 | rc = ll_md_real_close(inode, fd->fd_omode); | ||
| 328 | 319 | ||
| 329 | out: | 320 | out: |
| 330 | LUSTRE_FPRIVATE(file) = NULL; | 321 | LUSTRE_FPRIVATE(file) = NULL; |
| @@ -350,8 +341,7 @@ int ll_file_release(struct inode *inode, struct file *file) | |||
| 350 | inode->i_generation, inode); | 341 | inode->i_generation, inode); |
| 351 | 342 | ||
| 352 | #ifdef CONFIG_FS_POSIX_ACL | 343 | #ifdef CONFIG_FS_POSIX_ACL |
| 353 | if (sbi->ll_flags & LL_SBI_RMT_CLIENT && | 344 | if (sbi->ll_flags & LL_SBI_RMT_CLIENT && is_root_inode(inode)) { |
| 354 | inode == inode->i_sb->s_root->d_inode) { | ||
| 355 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); | 345 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); |
| 356 | 346 | ||
| 357 | LASSERT(fd != NULL); | 347 | LASSERT(fd != NULL); |
| @@ -363,7 +353,7 @@ int ll_file_release(struct inode *inode, struct file *file) | |||
| 363 | } | 353 | } |
| 364 | #endif | 354 | #endif |
| 365 | 355 | ||
| 366 | if (inode->i_sb->s_root != file->f_dentry) | 356 | if (!is_root_inode(inode)) |
| 367 | ll_stats_ops_tally(sbi, LPROC_LL_RELEASE, 1); | 357 | ll_stats_ops_tally(sbi, LPROC_LL_RELEASE, 1); |
| 368 | fd = LUSTRE_FPRIVATE(file); | 358 | fd = LUSTRE_FPRIVATE(file); |
| 369 | LASSERT(fd != NULL); | 359 | LASSERT(fd != NULL); |
| @@ -375,7 +365,7 @@ int ll_file_release(struct inode *inode, struct file *file) | |||
| 375 | lli->lli_opendir_pid != 0) | 365 | lli->lli_opendir_pid != 0) |
| 376 | ll_stop_statahead(inode, lli->lli_opendir_key); | 366 | ll_stop_statahead(inode, lli->lli_opendir_key); |
| 377 | 367 | ||
| 378 | if (inode->i_sb->s_root == file->f_dentry) { | 368 | if (is_root_inode(inode)) { |
| 379 | LUSTRE_FPRIVATE(file) = NULL; | 369 | LUSTRE_FPRIVATE(file) = NULL; |
| 380 | ll_file_data_put(fd); | 370 | ll_file_data_put(fd); |
| 381 | return 0; | 371 | return 0; |
| @@ -394,21 +384,19 @@ int ll_file_release(struct inode *inode, struct file *file) | |||
| 394 | return rc; | 384 | return rc; |
| 395 | } | 385 | } |
| 396 | 386 | ||
| 397 | static int ll_intent_file_open(struct file *file, void *lmm, | 387 | static int ll_intent_file_open(struct dentry *dentry, void *lmm, |
| 398 | int lmmsize, struct lookup_intent *itp) | 388 | int lmmsize, struct lookup_intent *itp) |
| 399 | { | 389 | { |
| 400 | struct ll_sb_info *sbi = ll_i2sbi(file->f_dentry->d_inode); | 390 | struct inode *inode = dentry->d_inode; |
| 401 | struct dentry *parent = file->f_dentry->d_parent; | 391 | struct ll_sb_info *sbi = ll_i2sbi(inode); |
| 402 | const char *name = file->f_dentry->d_name.name; | 392 | struct dentry *parent = dentry->d_parent; |
| 403 | const int len = file->f_dentry->d_name.len; | 393 | const char *name = dentry->d_name.name; |
| 394 | const int len = dentry->d_name.len; | ||
| 404 | struct md_op_data *op_data; | 395 | struct md_op_data *op_data; |
| 405 | struct ptlrpc_request *req; | 396 | struct ptlrpc_request *req; |
| 406 | __u32 opc = LUSTRE_OPC_ANY; | 397 | __u32 opc = LUSTRE_OPC_ANY; |
| 407 | int rc; | 398 | int rc; |
| 408 | 399 | ||
| 409 | if (!parent) | ||
| 410 | return -ENOENT; | ||
| 411 | |||
| 412 | /* Usually we come here only for NFSD, and we want open lock. | 400 | /* Usually we come here only for NFSD, and we want open lock. |
| 413 | But we can also get here with pre 2.6.15 patchless kernels, and in | 401 | But we can also get here with pre 2.6.15 patchless kernels, and in |
| 414 | that case that lock is also ok */ | 402 | that case that lock is also ok */ |
| @@ -425,7 +413,7 @@ static int ll_intent_file_open(struct file *file, void *lmm, | |||
| 425 | } | 413 | } |
| 426 | 414 | ||
| 427 | op_data = ll_prep_md_op_data(NULL, parent->d_inode, | 415 | op_data = ll_prep_md_op_data(NULL, parent->d_inode, |
| 428 | file->f_dentry->d_inode, name, len, | 416 | inode, name, len, |
| 429 | O_RDWR, opc, NULL); | 417 | O_RDWR, opc, NULL); |
| 430 | if (IS_ERR(op_data)) | 418 | if (IS_ERR(op_data)) |
| 431 | return PTR_ERR(op_data); | 419 | return PTR_ERR(op_data); |
| @@ -441,7 +429,7 @@ static int ll_intent_file_open(struct file *file, void *lmm, | |||
| 441 | if (!it_disposition(itp, DISP_OPEN_OPEN) || | 429 | if (!it_disposition(itp, DISP_OPEN_OPEN) || |
| 442 | it_open_error(DISP_OPEN_OPEN, itp)) | 430 | it_open_error(DISP_OPEN_OPEN, itp)) |
| 443 | goto out; | 431 | goto out; |
| 444 | ll_release_openhandle(file->f_dentry, itp); | 432 | ll_release_openhandle(inode, itp); |
| 445 | goto out; | 433 | goto out; |
| 446 | } | 434 | } |
| 447 | 435 | ||
| @@ -456,10 +444,9 @@ static int ll_intent_file_open(struct file *file, void *lmm, | |||
| 456 | goto out; | 444 | goto out; |
| 457 | } | 445 | } |
| 458 | 446 | ||
| 459 | rc = ll_prep_inode(&file->f_dentry->d_inode, req, NULL, itp); | 447 | rc = ll_prep_inode(&inode, req, NULL, itp); |
| 460 | if (!rc && itp->d.lustre.it_lock_mode) | 448 | if (!rc && itp->d.lustre.it_lock_mode) |
| 461 | ll_set_lock_data(sbi->ll_md_exp, file->f_dentry->d_inode, | 449 | ll_set_lock_data(sbi->ll_md_exp, inode, itp, NULL); |
| 462 | itp, NULL); | ||
| 463 | 450 | ||
| 464 | out: | 451 | out: |
| 465 | ptlrpc_req_finished(req); | 452 | ptlrpc_req_finished(req); |
| @@ -501,7 +488,7 @@ static int ll_och_fill(struct obd_export *md_exp, struct lookup_intent *it, | |||
| 501 | static int ll_local_open(struct file *file, struct lookup_intent *it, | 488 | static int ll_local_open(struct file *file, struct lookup_intent *it, |
| 502 | struct ll_file_data *fd, struct obd_client_handle *och) | 489 | struct ll_file_data *fd, struct obd_client_handle *och) |
| 503 | { | 490 | { |
| 504 | struct inode *inode = file->f_dentry->d_inode; | 491 | struct inode *inode = file_inode(file); |
| 505 | struct ll_inode_info *lli = ll_i2info(inode); | 492 | struct ll_inode_info *lli = ll_i2info(inode); |
| 506 | 493 | ||
| 507 | LASSERT(!LUSTRE_FPRIVATE(file)); | 494 | LASSERT(!LUSTRE_FPRIVATE(file)); |
| @@ -574,7 +561,7 @@ int ll_file_open(struct inode *inode, struct file *file) | |||
| 574 | spin_unlock(&lli->lli_sa_lock); | 561 | spin_unlock(&lli->lli_sa_lock); |
| 575 | } | 562 | } |
| 576 | 563 | ||
| 577 | if (inode->i_sb->s_root == file->f_dentry) { | 564 | if (is_root_inode(inode)) { |
| 578 | LUSTRE_FPRIVATE(file) = fd; | 565 | LUSTRE_FPRIVATE(file) = fd; |
| 579 | return 0; | 566 | return 0; |
| 580 | } | 567 | } |
| @@ -632,7 +619,7 @@ restart: | |||
| 632 | goto out_openerr; | 619 | goto out_openerr; |
| 633 | } | 620 | } |
| 634 | 621 | ||
| 635 | ll_release_openhandle(file->f_dentry, it); | 622 | ll_release_openhandle(inode, it); |
| 636 | } | 623 | } |
| 637 | (*och_usecount)++; | 624 | (*och_usecount)++; |
| 638 | 625 | ||
| @@ -652,7 +639,7 @@ restart: | |||
| 652 | result in a deadlock */ | 639 | result in a deadlock */ |
| 653 | mutex_unlock(&lli->lli_och_mutex); | 640 | mutex_unlock(&lli->lli_och_mutex); |
| 654 | it->it_create_mode |= M_CHECK_STALE; | 641 | it->it_create_mode |= M_CHECK_STALE; |
| 655 | rc = ll_intent_file_open(file, NULL, 0, it); | 642 | rc = ll_intent_file_open(file->f_path.dentry, NULL, 0, it); |
| 656 | it->it_create_mode &= ~M_CHECK_STALE; | 643 | it->it_create_mode &= ~M_CHECK_STALE; |
| 657 | if (rc) | 644 | if (rc) |
| 658 | goto out_openerr; | 645 | goto out_openerr; |
| @@ -1065,7 +1052,7 @@ int ll_glimpse_ioctl(struct ll_sb_info *sbi, struct lov_stripe_md *lsm, | |||
| 1065 | static bool file_is_noatime(const struct file *file) | 1052 | static bool file_is_noatime(const struct file *file) |
| 1066 | { | 1053 | { |
| 1067 | const struct vfsmount *mnt = file->f_path.mnt; | 1054 | const struct vfsmount *mnt = file->f_path.mnt; |
| 1068 | const struct inode *inode = file->f_path.dentry->d_inode; | 1055 | const struct inode *inode = file_inode(file); |
| 1069 | 1056 | ||
| 1070 | /* Adapted from file_accessed() and touch_atime().*/ | 1057 | /* Adapted from file_accessed() and touch_atime().*/ |
| 1071 | if (file->f_flags & O_NOATIME) | 1058 | if (file->f_flags & O_NOATIME) |
| @@ -1091,7 +1078,7 @@ static bool file_is_noatime(const struct file *file) | |||
| 1091 | 1078 | ||
| 1092 | void ll_io_init(struct cl_io *io, const struct file *file, int write) | 1079 | void ll_io_init(struct cl_io *io, const struct file *file, int write) |
| 1093 | { | 1080 | { |
| 1094 | struct inode *inode = file->f_dentry->d_inode; | 1081 | struct inode *inode = file_inode(file); |
| 1095 | 1082 | ||
| 1096 | io->u.ci_rw.crw_nonblock = file->f_flags & O_NONBLOCK; | 1083 | io->u.ci_rw.crw_nonblock = file->f_flags & O_NONBLOCK; |
| 1097 | if (write) { | 1084 | if (write) { |
| @@ -1117,7 +1104,7 @@ ll_file_io_generic(const struct lu_env *env, struct vvp_io_args *args, | |||
| 1117 | struct file *file, enum cl_io_type iot, | 1104 | struct file *file, enum cl_io_type iot, |
| 1118 | loff_t *ppos, size_t count) | 1105 | loff_t *ppos, size_t count) |
| 1119 | { | 1106 | { |
| 1120 | struct ll_inode_info *lli = ll_i2info(file->f_dentry->d_inode); | 1107 | struct ll_inode_info *lli = ll_i2info(file_inode(file)); |
| 1121 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); | 1108 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); |
| 1122 | struct cl_io *io; | 1109 | struct cl_io *io; |
| 1123 | ssize_t result; | 1110 | ssize_t result; |
| @@ -1178,20 +1165,20 @@ out: | |||
| 1178 | /* If any bit been read/written (result != 0), we just return | 1165 | /* If any bit been read/written (result != 0), we just return |
| 1179 | * short read/write instead of restart io. */ | 1166 | * short read/write instead of restart io. */ |
| 1180 | if ((result == 0 || result == -ENODATA) && io->ci_need_restart) { | 1167 | if ((result == 0 || result == -ENODATA) && io->ci_need_restart) { |
| 1181 | CDEBUG(D_VFSTRACE, "Restart %s on %s from %lld, count:%zd\n", | 1168 | CDEBUG(D_VFSTRACE, "Restart %s on %pD from %lld, count:%zd\n", |
| 1182 | iot == CIT_READ ? "read" : "write", | 1169 | iot == CIT_READ ? "read" : "write", |
| 1183 | file->f_dentry->d_name.name, *ppos, count); | 1170 | file, *ppos, count); |
| 1184 | LASSERTF(io->ci_nob == 0, "%zd", io->ci_nob); | 1171 | LASSERTF(io->ci_nob == 0, "%zd", io->ci_nob); |
| 1185 | goto restart; | 1172 | goto restart; |
| 1186 | } | 1173 | } |
| 1187 | 1174 | ||
| 1188 | if (iot == CIT_READ) { | 1175 | if (iot == CIT_READ) { |
| 1189 | if (result >= 0) | 1176 | if (result >= 0) |
| 1190 | ll_stats_ops_tally(ll_i2sbi(file->f_dentry->d_inode), | 1177 | ll_stats_ops_tally(ll_i2sbi(file_inode(file)), |
| 1191 | LPROC_LL_READ_BYTES, result); | 1178 | LPROC_LL_READ_BYTES, result); |
| 1192 | } else if (iot == CIT_WRITE) { | 1179 | } else if (iot == CIT_WRITE) { |
| 1193 | if (result >= 0) { | 1180 | if (result >= 0) { |
| 1194 | ll_stats_ops_tally(ll_i2sbi(file->f_dentry->d_inode), | 1181 | ll_stats_ops_tally(ll_i2sbi(file_inode(file)), |
| 1195 | LPROC_LL_WRITE_BYTES, result); | 1182 | LPROC_LL_WRITE_BYTES, result); |
| 1196 | fd->fd_write_failed = false; | 1183 | fd->fd_write_failed = false; |
| 1197 | } else if (result != -ERESTARTSYS) { | 1184 | } else if (result != -ERESTARTSYS) { |
| @@ -1354,7 +1341,7 @@ static int ll_lov_recreate_fid(struct inode *inode, unsigned long arg) | |||
| 1354 | return ll_lov_recreate(inode, &oi, ost_idx); | 1341 | return ll_lov_recreate(inode, &oi, ost_idx); |
| 1355 | } | 1342 | } |
| 1356 | 1343 | ||
| 1357 | int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file, | 1344 | int ll_lov_setstripe_ea_info(struct inode *inode, struct dentry *dentry, |
| 1358 | int flags, struct lov_user_md *lum, int lum_size) | 1345 | int flags, struct lov_user_md *lum, int lum_size) |
| 1359 | { | 1346 | { |
| 1360 | struct lov_stripe_md *lsm = NULL; | 1347 | struct lov_stripe_md *lsm = NULL; |
| @@ -1371,21 +1358,20 @@ int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file, | |||
| 1371 | } | 1358 | } |
| 1372 | 1359 | ||
| 1373 | ll_inode_size_lock(inode); | 1360 | ll_inode_size_lock(inode); |
| 1374 | rc = ll_intent_file_open(file, lum, lum_size, &oit); | 1361 | rc = ll_intent_file_open(dentry, lum, lum_size, &oit); |
| 1375 | if (rc) | 1362 | if (rc) |
| 1376 | goto out_unlock; | 1363 | goto out_unlock; |
| 1377 | rc = oit.d.lustre.it_status; | 1364 | rc = oit.d.lustre.it_status; |
| 1378 | if (rc < 0) | 1365 | if (rc < 0) |
| 1379 | goto out_req_free; | 1366 | goto out_req_free; |
| 1380 | 1367 | ||
| 1381 | ll_release_openhandle(file->f_dentry, &oit); | 1368 | ll_release_openhandle(inode, &oit); |
| 1382 | 1369 | ||
| 1383 | out_unlock: | 1370 | out_unlock: |
| 1384 | ll_inode_size_unlock(inode); | 1371 | ll_inode_size_unlock(inode); |
| 1385 | ll_intent_release(&oit); | 1372 | ll_intent_release(&oit); |
| 1386 | ccc_inode_lsm_put(inode, lsm); | 1373 | ccc_inode_lsm_put(inode, lsm); |
| 1387 | out: | 1374 | out: |
| 1388 | cl_lov_delay_create_clear(&file->f_flags); | ||
| 1389 | return rc; | 1375 | return rc; |
| 1390 | out_req_free: | 1376 | out_req_free: |
| 1391 | ptlrpc_req_finished((struct ptlrpc_request *) oit.d.lustre.it_data); | 1377 | ptlrpc_req_finished((struct ptlrpc_request *) oit.d.lustre.it_data); |
| @@ -1499,7 +1485,9 @@ static int ll_lov_setea(struct inode *inode, struct file *file, | |||
| 1499 | return -EFAULT; | 1485 | return -EFAULT; |
| 1500 | } | 1486 | } |
| 1501 | 1487 | ||
| 1502 | rc = ll_lov_setstripe_ea_info(inode, file, flags, lump, lum_size); | 1488 | rc = ll_lov_setstripe_ea_info(inode, file->f_path.dentry, flags, lump, |
| 1489 | lum_size); | ||
| 1490 | cl_lov_delay_create_clear(&file->f_flags); | ||
| 1503 | 1491 | ||
| 1504 | OBD_FREE_LARGE(lump, lum_size); | 1492 | OBD_FREE_LARGE(lump, lum_size); |
| 1505 | return rc; | 1493 | return rc; |
| @@ -1526,7 +1514,9 @@ static int ll_lov_setstripe(struct inode *inode, struct file *file, | |||
| 1526 | return -EFAULT; | 1514 | return -EFAULT; |
| 1527 | } | 1515 | } |
| 1528 | 1516 | ||
| 1529 | rc = ll_lov_setstripe_ea_info(inode, file, flags, lumv1, lum_size); | 1517 | rc = ll_lov_setstripe_ea_info(inode, file->f_path.dentry, flags, lumv1, |
| 1518 | lum_size); | ||
| 1519 | cl_lov_delay_create_clear(&file->f_flags); | ||
| 1530 | if (rc == 0) { | 1520 | if (rc == 0) { |
| 1531 | struct lov_stripe_md *lsm; | 1521 | struct lov_stripe_md *lsm; |
| 1532 | __u32 gen; | 1522 | __u32 gen; |
| @@ -1631,22 +1621,21 @@ int ll_put_grouplock(struct inode *inode, struct file *file, unsigned long arg) | |||
| 1631 | /** | 1621 | /** |
| 1632 | * Close inode open handle | 1622 | * Close inode open handle |
| 1633 | * | 1623 | * |
| 1634 | * \param dentry [in] dentry which contains the inode | 1624 | * \param inode [in] inode in question |
| 1635 | * \param it [in,out] intent which contains open info and result | 1625 | * \param it [in,out] intent which contains open info and result |
| 1636 | * | 1626 | * |
| 1637 | * \retval 0 success | 1627 | * \retval 0 success |
| 1638 | * \retval <0 failure | 1628 | * \retval <0 failure |
| 1639 | */ | 1629 | */ |
| 1640 | int ll_release_openhandle(struct dentry *dentry, struct lookup_intent *it) | 1630 | int ll_release_openhandle(struct inode *inode, struct lookup_intent *it) |
| 1641 | { | 1631 | { |
| 1642 | struct inode *inode = dentry->d_inode; | ||
| 1643 | struct obd_client_handle *och; | 1632 | struct obd_client_handle *och; |
| 1644 | int rc; | 1633 | int rc; |
| 1645 | 1634 | ||
| 1646 | LASSERT(inode); | 1635 | LASSERT(inode); |
| 1647 | 1636 | ||
| 1648 | /* Root ? Do nothing. */ | 1637 | /* Root ? Do nothing. */ |
| 1649 | if (dentry->d_inode->i_sb->s_root == dentry) | 1638 | if (is_root_inode(inode)) |
| 1650 | return 0; | 1639 | return 0; |
| 1651 | 1640 | ||
| 1652 | /* No open handle to close? Move away */ | 1641 | /* No open handle to close? Move away */ |
| @@ -1959,8 +1948,8 @@ static int ll_swap_layouts(struct file *file1, struct file *file2, | |||
| 1959 | if (!llss) | 1948 | if (!llss) |
| 1960 | return -ENOMEM; | 1949 | return -ENOMEM; |
| 1961 | 1950 | ||
| 1962 | llss->inode1 = file1->f_dentry->d_inode; | 1951 | llss->inode1 = file_inode(file1); |
| 1963 | llss->inode2 = file2->f_dentry->d_inode; | 1952 | llss->inode2 = file_inode(file2); |
| 1964 | 1953 | ||
| 1965 | if (!S_ISREG(llss->inode2->i_mode)) { | 1954 | if (!S_ISREG(llss->inode2->i_mode)) { |
| 1966 | rc = -EINVAL; | 1955 | rc = -EINVAL; |
| @@ -2204,7 +2193,7 @@ out: | |||
| 2204 | static long | 2193 | static long |
| 2205 | ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | 2194 | ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| 2206 | { | 2195 | { |
| 2207 | struct inode *inode = file->f_dentry->d_inode; | 2196 | struct inode *inode = file_inode(file); |
| 2208 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); | 2197 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); |
| 2209 | int flags, rc; | 2198 | int flags, rc; |
| 2210 | 2199 | ||
| @@ -2523,7 +2512,7 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 2523 | 2512 | ||
| 2524 | static loff_t ll_file_seek(struct file *file, loff_t offset, int origin) | 2513 | static loff_t ll_file_seek(struct file *file, loff_t offset, int origin) |
| 2525 | { | 2514 | { |
| 2526 | struct inode *inode = file->f_dentry->d_inode; | 2515 | struct inode *inode = file_inode(file); |
| 2527 | loff_t retval, eof = 0; | 2516 | loff_t retval, eof = 0; |
| 2528 | 2517 | ||
| 2529 | retval = offset + ((origin == SEEK_END) ? i_size_read(inode) : | 2518 | retval = offset + ((origin == SEEK_END) ? i_size_read(inode) : |
| @@ -2547,7 +2536,7 @@ static loff_t ll_file_seek(struct file *file, loff_t offset, int origin) | |||
| 2547 | 2536 | ||
| 2548 | static int ll_flush(struct file *file, fl_owner_t id) | 2537 | static int ll_flush(struct file *file, fl_owner_t id) |
| 2549 | { | 2538 | { |
| 2550 | struct inode *inode = file->f_dentry->d_inode; | 2539 | struct inode *inode = file_inode(file); |
| 2551 | struct ll_inode_info *lli = ll_i2info(inode); | 2540 | struct ll_inode_info *lli = ll_i2info(inode); |
| 2552 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); | 2541 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); |
| 2553 | int rc, err; | 2542 | int rc, err; |
| @@ -2624,8 +2613,7 @@ int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end, | |||
| 2624 | 2613 | ||
| 2625 | int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync) | 2614 | int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync) |
| 2626 | { | 2615 | { |
| 2627 | struct dentry *dentry = file->f_dentry; | 2616 | struct inode *inode = file_inode(file); |
| 2628 | struct inode *inode = dentry->d_inode; | ||
| 2629 | struct ll_inode_info *lli = ll_i2info(inode); | 2617 | struct ll_inode_info *lli = ll_i2info(inode); |
| 2630 | struct ptlrpc_request *req; | 2618 | struct ptlrpc_request *req; |
| 2631 | struct obd_capa *oc; | 2619 | struct obd_capa *oc; |
| @@ -2678,7 +2666,7 @@ int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync) | |||
| 2678 | static int | 2666 | static int |
| 2679 | ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) | 2667 | ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) |
| 2680 | { | 2668 | { |
| 2681 | struct inode *inode = file->f_dentry->d_inode; | 2669 | struct inode *inode = file_inode(file); |
| 2682 | struct ll_sb_info *sbi = ll_i2sbi(inode); | 2670 | struct ll_sb_info *sbi = ll_i2sbi(inode); |
| 2683 | struct ldlm_enqueue_info einfo = { | 2671 | struct ldlm_enqueue_info einfo = { |
| 2684 | .ei_type = LDLM_FLOCK, | 2672 | .ei_type = LDLM_FLOCK, |
| @@ -2902,8 +2890,8 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits) | |||
| 2902 | 2890 | ||
| 2903 | LASSERT(inode != NULL); | 2891 | LASSERT(inode != NULL); |
| 2904 | 2892 | ||
| 2905 | CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p),name=%s\n", | 2893 | CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p),name=%pd\n", |
| 2906 | inode->i_ino, inode->i_generation, inode, dentry->d_name.name); | 2894 | inode->i_ino, inode->i_generation, inode, dentry); |
| 2907 | 2895 | ||
| 2908 | exp = ll_i2mdexp(inode); | 2896 | exp = ll_i2mdexp(inode); |
| 2909 | 2897 | ||
| @@ -3113,7 +3101,7 @@ int ll_inode_permission(struct inode *inode, int mask) | |||
| 3113 | /* as root inode are NOT getting validated in lookup operation, | 3101 | /* as root inode are NOT getting validated in lookup operation, |
| 3114 | * need to do it before permission check. */ | 3102 | * need to do it before permission check. */ |
| 3115 | 3103 | ||
| 3116 | if (inode == inode->i_sb->s_root->d_inode) { | 3104 | if (is_root_inode(inode)) { |
| 3117 | rc = __ll_inode_revalidate(inode->i_sb->s_root, | 3105 | rc = __ll_inode_revalidate(inode->i_sb->s_root, |
| 3118 | MDS_INODELOCK_LOOKUP); | 3106 | MDS_INODELOCK_LOOKUP); |
| 3119 | if (rc) | 3107 | if (rc) |
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index 36aa0fd147f2..77d1c12704b4 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h | |||
| @@ -748,7 +748,7 @@ int ll_file_release(struct inode *inode, struct file *file); | |||
| 748 | int ll_glimpse_ioctl(struct ll_sb_info *sbi, | 748 | int ll_glimpse_ioctl(struct ll_sb_info *sbi, |
| 749 | struct lov_stripe_md *lsm, lstat_t *st); | 749 | struct lov_stripe_md *lsm, lstat_t *st); |
| 750 | void ll_ioepoch_open(struct ll_inode_info *lli, __u64 ioepoch); | 750 | void ll_ioepoch_open(struct ll_inode_info *lli, __u64 ioepoch); |
| 751 | int ll_release_openhandle(struct dentry *, struct lookup_intent *); | 751 | int ll_release_openhandle(struct inode *, struct lookup_intent *); |
| 752 | int ll_md_real_close(struct inode *inode, fmode_t fmode); | 752 | int ll_md_real_close(struct inode *inode, fmode_t fmode); |
| 753 | void ll_ioepoch_close(struct inode *inode, struct md_op_data *op_data, | 753 | void ll_ioepoch_close(struct inode *inode, struct md_op_data *op_data, |
| 754 | struct obd_client_handle **och, unsigned long flags); | 754 | struct obd_client_handle **och, unsigned long flags); |
| @@ -763,7 +763,7 @@ struct posix_acl *ll_get_acl(struct inode *inode, int type); | |||
| 763 | 763 | ||
| 764 | int ll_inode_permission(struct inode *inode, int mask); | 764 | int ll_inode_permission(struct inode *inode, int mask); |
| 765 | 765 | ||
| 766 | int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file, | 766 | int ll_lov_setstripe_ea_info(struct inode *inode, struct dentry *dentry, |
| 767 | int flags, struct lov_user_md *lum, | 767 | int flags, struct lov_user_md *lum, |
| 768 | int lum_size); | 768 | int lum_size); |
| 769 | int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename, | 769 | int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename, |
| @@ -1413,7 +1413,7 @@ extern ssize_t ll_direct_rw_pages(const struct lu_env *env, struct cl_io *io, | |||
| 1413 | static inline int ll_file_nolock(const struct file *file) | 1413 | static inline int ll_file_nolock(const struct file *file) |
| 1414 | { | 1414 | { |
| 1415 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); | 1415 | struct ll_file_data *fd = LUSTRE_FPRIVATE(file); |
| 1416 | struct inode *inode = file->f_dentry->d_inode; | 1416 | struct inode *inode = file_inode(file); |
| 1417 | 1417 | ||
| 1418 | LASSERT(fd != NULL); | 1418 | LASSERT(fd != NULL); |
| 1419 | return ((fd->fd_flags & LL_FILE_IGNORE_LOCK) || | 1419 | return ((fd->fd_flags & LL_FILE_IGNORE_LOCK) || |
| @@ -1489,8 +1489,8 @@ static inline void __d_lustre_invalidate(struct dentry *dentry) | |||
| 1489 | */ | 1489 | */ |
| 1490 | static inline void d_lustre_invalidate(struct dentry *dentry, int nested) | 1490 | static inline void d_lustre_invalidate(struct dentry *dentry, int nested) |
| 1491 | { | 1491 | { |
| 1492 | CDEBUG(D_DENTRY, "invalidate dentry %.*s (%p) parent %p inode %p " | 1492 | CDEBUG(D_DENTRY, "invalidate dentry %pd (%p) parent %p inode %p " |
| 1493 | "refc %d\n", dentry->d_name.len, dentry->d_name.name, dentry, | 1493 | "refc %d\n", dentry, dentry, |
| 1494 | dentry->d_parent, dentry->d_inode, d_count(dentry)); | 1494 | dentry->d_parent, dentry->d_inode, d_count(dentry)); |
| 1495 | 1495 | ||
| 1496 | spin_lock_nested(&dentry->d_lock, | 1496 | spin_lock_nested(&dentry->d_lock, |
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index f4ca7b753021..7b6b9e2e0102 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c | |||
| @@ -698,10 +698,8 @@ void lustre_dump_dentry(struct dentry *dentry, int recur) | |||
| 698 | list_for_each(tmp, &dentry->d_subdirs) | 698 | list_for_each(tmp, &dentry->d_subdirs) |
| 699 | subdirs++; | 699 | subdirs++; |
| 700 | 700 | ||
| 701 | CERROR("dentry %p dump: name=%.*s parent=%.*s (%p), inode=%p, count=%u," | 701 | CERROR("dentry %p dump: name=%pd parent=%p, inode=%p, count=%u," |
| 702 | " flags=0x%x, fsdata=%p, %d subdirs\n", dentry, | 702 | " flags=0x%x, fsdata=%p, %d subdirs\n", dentry, dentry, |
| 703 | dentry->d_name.len, dentry->d_name.name, | ||
| 704 | dentry->d_parent->d_name.len, dentry->d_parent->d_name.name, | ||
| 705 | dentry->d_parent, dentry->d_inode, d_count(dentry), | 703 | dentry->d_parent, dentry->d_inode, d_count(dentry), |
| 706 | dentry->d_flags, dentry->d_fsdata, subdirs); | 704 | dentry->d_flags, dentry->d_fsdata, subdirs); |
| 707 | if (dentry->d_inode != NULL) | 705 | if (dentry->d_inode != NULL) |
diff --git a/drivers/staging/lustre/lustre/llite/llite_mmap.c b/drivers/staging/lustre/lustre/llite/llite_mmap.c index ae605a6d9dc2..ba1c047ae927 100644 --- a/drivers/staging/lustre/lustre/llite/llite_mmap.c +++ b/drivers/staging/lustre/lustre/llite/llite_mmap.c | |||
| @@ -100,7 +100,7 @@ ll_fault_io_init(struct vm_area_struct *vma, struct lu_env **env_ret, | |||
| 100 | unsigned long *ra_flags) | 100 | unsigned long *ra_flags) |
| 101 | { | 101 | { |
| 102 | struct file *file = vma->vm_file; | 102 | struct file *file = vma->vm_file; |
| 103 | struct inode *inode = file->f_dentry->d_inode; | 103 | struct inode *inode = file_inode(file); |
| 104 | struct cl_io *io; | 104 | struct cl_io *io; |
| 105 | struct cl_fault_io *fio; | 105 | struct cl_fault_io *fio; |
| 106 | struct lu_env *env; | 106 | struct lu_env *env; |
| @@ -213,7 +213,7 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage, | |||
| 213 | cfs_restore_sigs(set); | 213 | cfs_restore_sigs(set); |
| 214 | 214 | ||
| 215 | if (result == 0) { | 215 | if (result == 0) { |
| 216 | struct inode *inode = vma->vm_file->f_dentry->d_inode; | 216 | struct inode *inode = file_inode(vma->vm_file); |
| 217 | struct ll_inode_info *lli = ll_i2info(inode); | 217 | struct ll_inode_info *lli = ll_i2info(inode); |
| 218 | 218 | ||
| 219 | lock_page(vmpage); | 219 | lock_page(vmpage); |
| @@ -396,7 +396,7 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 396 | CWARN("app(%s): the page %lu of file %lu is under heavy" | 396 | CWARN("app(%s): the page %lu of file %lu is under heavy" |
| 397 | " contention.\n", | 397 | " contention.\n", |
| 398 | current->comm, vmf->pgoff, | 398 | current->comm, vmf->pgoff, |
| 399 | vma->vm_file->f_dentry->d_inode->i_ino); | 399 | file_inode(vma->vm_file)->i_ino); |
| 400 | printed = true; | 400 | printed = true; |
| 401 | } | 401 | } |
| 402 | } while (retry); | 402 | } while (retry); |
| @@ -430,7 +430,7 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 430 | */ | 430 | */ |
| 431 | static void ll_vm_open(struct vm_area_struct *vma) | 431 | static void ll_vm_open(struct vm_area_struct *vma) |
| 432 | { | 432 | { |
| 433 | struct inode *inode = vma->vm_file->f_dentry->d_inode; | 433 | struct inode *inode = file_inode(vma->vm_file); |
| 434 | struct ccc_object *vob = cl_inode2ccc(inode); | 434 | struct ccc_object *vob = cl_inode2ccc(inode); |
| 435 | 435 | ||
| 436 | LASSERT(vma->vm_file); | 436 | LASSERT(vma->vm_file); |
| @@ -443,7 +443,7 @@ static void ll_vm_open(struct vm_area_struct *vma) | |||
| 443 | */ | 443 | */ |
| 444 | static void ll_vm_close(struct vm_area_struct *vma) | 444 | static void ll_vm_close(struct vm_area_struct *vma) |
| 445 | { | 445 | { |
| 446 | struct inode *inode = vma->vm_file->f_dentry->d_inode; | 446 | struct inode *inode = file_inode(vma->vm_file); |
| 447 | struct ccc_object *vob = cl_inode2ccc(inode); | 447 | struct ccc_object *vob = cl_inode2ccc(inode); |
| 448 | 448 | ||
| 449 | LASSERT(vma->vm_file); | 449 | LASSERT(vma->vm_file); |
| @@ -476,7 +476,7 @@ static const struct vm_operations_struct ll_file_vm_ops = { | |||
| 476 | 476 | ||
| 477 | int ll_file_mmap(struct file *file, struct vm_area_struct *vma) | 477 | int ll_file_mmap(struct file *file, struct vm_area_struct *vma) |
| 478 | { | 478 | { |
| 479 | struct inode *inode = file->f_dentry->d_inode; | 479 | struct inode *inode = file_inode(file); |
| 480 | int rc; | 480 | int rc; |
| 481 | 481 | ||
| 482 | if (ll_file_nolock(file)) | 482 | if (ll_file_nolock(file)) |
diff --git a/drivers/staging/lustre/lustre/llite/lloop.c b/drivers/staging/lustre/lustre/llite/lloop.c index 264e5ec3fed6..9e31b789b790 100644 --- a/drivers/staging/lustre/lustre/llite/lloop.c +++ b/drivers/staging/lustre/lustre/llite/lloop.c | |||
| @@ -187,7 +187,7 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head) | |||
| 187 | { | 187 | { |
| 188 | const struct lu_env *env = lo->lo_env; | 188 | const struct lu_env *env = lo->lo_env; |
| 189 | struct cl_io *io = &lo->lo_io; | 189 | struct cl_io *io = &lo->lo_io; |
| 190 | struct inode *inode = lo->lo_backing_file->f_dentry->d_inode; | 190 | struct inode *inode = file_inode(lo->lo_backing_file); |
| 191 | struct cl_object *obj = ll_i2info(inode)->lli_clob; | 191 | struct cl_object *obj = ll_i2info(inode)->lli_clob; |
| 192 | pgoff_t offset; | 192 | pgoff_t offset; |
| 193 | int ret; | 193 | int ret; |
| @@ -626,7 +626,7 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode, | |||
| 626 | break; | 626 | break; |
| 627 | } | 627 | } |
| 628 | if (inode == NULL) | 628 | if (inode == NULL) |
| 629 | inode = lo->lo_backing_file->f_dentry->d_inode; | 629 | inode = file_inode(lo->lo_backing_file); |
| 630 | if (lo->lo_state == LLOOP_BOUND) | 630 | if (lo->lo_state == LLOOP_BOUND) |
| 631 | fid = ll_i2info(inode)->lli_fid; | 631 | fid = ll_i2info(inode)->lli_fid; |
| 632 | else | 632 | else |
| @@ -692,8 +692,7 @@ static enum llioc_iter lloop_ioctl(struct inode *unused, struct file *file, | |||
| 692 | lo_free = lo; | 692 | lo_free = lo; |
| 693 | continue; | 693 | continue; |
| 694 | } | 694 | } |
| 695 | if (lo->lo_backing_file->f_dentry->d_inode == | 695 | if (file_inode(lo->lo_backing_file) == file_inode(file)) |
| 696 | file->f_dentry->d_inode) | ||
| 697 | break; | 696 | break; |
| 698 | } | 697 | } |
| 699 | if (lo || !lo_free) { | 698 | if (lo || !lo_free) { |
diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c index 6dfd98509268..8e926b385a60 100644 --- a/drivers/staging/lustre/lustre/llite/namei.c +++ b/drivers/staging/lustre/lustre/llite/namei.c | |||
| @@ -54,27 +54,6 @@ | |||
| 54 | static int ll_create_it(struct inode *, struct dentry *, | 54 | static int ll_create_it(struct inode *, struct dentry *, |
| 55 | int, struct lookup_intent *); | 55 | int, struct lookup_intent *); |
| 56 | 56 | ||
| 57 | /* | ||
| 58 | * Check if we have something mounted at the named dchild. | ||
| 59 | * In such a case there would always be dentry present. | ||
| 60 | */ | ||
| 61 | static int ll_d_mountpoint(struct dentry *dparent, struct dentry *dchild, | ||
| 62 | struct qstr *name) | ||
| 63 | { | ||
| 64 | int mounted = 0; | ||
| 65 | |||
| 66 | if (unlikely(dchild)) { | ||
| 67 | mounted = d_mountpoint(dchild); | ||
| 68 | } else if (dparent) { | ||
| 69 | dchild = d_lookup(dparent, name); | ||
| 70 | if (dchild) { | ||
| 71 | mounted = d_mountpoint(dchild); | ||
| 72 | dput(dchild); | ||
| 73 | } | ||
| 74 | } | ||
| 75 | return mounted; | ||
| 76 | } | ||
| 77 | |||
| 78 | /* called from iget5_locked->find_inode() under inode_hash_lock spinlock */ | 57 | /* called from iget5_locked->find_inode() under inode_hash_lock spinlock */ |
| 79 | static int ll_test_inode(struct inode *inode, void *opaque) | 58 | static int ll_test_inode(struct inode *inode, void *opaque) |
| 80 | { | 59 | { |
| @@ -285,7 +264,7 @@ int ll_md_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc, | |||
| 285 | 264 | ||
| 286 | if ((bits & (MDS_INODELOCK_LOOKUP | MDS_INODELOCK_PERM)) && | 265 | if ((bits & (MDS_INODELOCK_LOOKUP | MDS_INODELOCK_PERM)) && |
| 287 | inode->i_sb->s_root != NULL && | 266 | inode->i_sb->s_root != NULL && |
| 288 | inode != inode->i_sb->s_root->d_inode) | 267 | is_root_inode(inode)) |
| 289 | ll_invalidate_aliases(inode); | 268 | ll_invalidate_aliases(inode); |
| 290 | 269 | ||
| 291 | iput(inode); | 270 | iput(inode); |
| @@ -509,8 +488,8 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry, | |||
| 509 | if (dentry->d_name.len > ll_i2sbi(parent)->ll_namelen) | 488 | if (dentry->d_name.len > ll_i2sbi(parent)->ll_namelen) |
| 510 | return ERR_PTR(-ENAMETOOLONG); | 489 | return ERR_PTR(-ENAMETOOLONG); |
| 511 | 490 | ||
| 512 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),intent=%s\n", | 491 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p),intent=%s\n", |
| 513 | dentry->d_name.len, dentry->d_name.name, parent->i_ino, | 492 | dentry, parent->i_ino, |
| 514 | parent->i_generation, parent, LL_IT2STR(it)); | 493 | parent->i_generation, parent, LL_IT2STR(it)); |
| 515 | 494 | ||
| 516 | if (d_mountpoint(dentry)) | 495 | if (d_mountpoint(dentry)) |
| @@ -563,7 +542,7 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry, | |||
| 563 | if ((it->it_op & IT_OPEN) && dentry->d_inode && | 542 | if ((it->it_op & IT_OPEN) && dentry->d_inode && |
| 564 | !S_ISREG(dentry->d_inode->i_mode) && | 543 | !S_ISREG(dentry->d_inode->i_mode) && |
| 565 | !S_ISDIR(dentry->d_inode->i_mode)) { | 544 | !S_ISDIR(dentry->d_inode->i_mode)) { |
| 566 | ll_release_openhandle(dentry, it); | 545 | ll_release_openhandle(dentry->d_inode, it); |
| 567 | } | 546 | } |
| 568 | ll_lookup_finish_locks(it, dentry); | 547 | ll_lookup_finish_locks(it, dentry); |
| 569 | 548 | ||
| @@ -586,8 +565,8 @@ static struct dentry *ll_lookup_nd(struct inode *parent, struct dentry *dentry, | |||
| 586 | struct lookup_intent *itp, it = { .it_op = IT_GETATTR }; | 565 | struct lookup_intent *itp, it = { .it_op = IT_GETATTR }; |
| 587 | struct dentry *de; | 566 | struct dentry *de; |
| 588 | 567 | ||
| 589 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),flags=%u\n", | 568 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p),flags=%u\n", |
| 590 | dentry->d_name.len, dentry->d_name.name, parent->i_ino, | 569 | dentry, parent->i_ino, |
| 591 | parent->i_generation, parent, flags); | 570 | parent->i_generation, parent, flags); |
| 592 | 571 | ||
| 593 | /* Optimize away (CREATE && !OPEN). Let .create handle the race. */ | 572 | /* Optimize away (CREATE && !OPEN). Let .create handle the race. */ |
| @@ -619,9 +598,9 @@ static int ll_atomic_open(struct inode *dir, struct dentry *dentry, | |||
| 619 | long long lookup_flags = LOOKUP_OPEN; | 598 | long long lookup_flags = LOOKUP_OPEN; |
| 620 | int rc = 0; | 599 | int rc = 0; |
| 621 | 600 | ||
| 622 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),file %p," | 601 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p),file %p," |
| 623 | "open_flags %x,mode %x opened %d\n", | 602 | "open_flags %x,mode %x opened %d\n", |
| 624 | dentry->d_name.len, dentry->d_name.name, dir->i_ino, | 603 | dentry, dir->i_ino, |
| 625 | dir->i_generation, dir, file, open_flags, mode, *opened); | 604 | dir->i_generation, dir, file, open_flags, mode, *opened); |
| 626 | 605 | ||
| 627 | it = kzalloc(sizeof(*it), GFP_NOFS); | 606 | it = kzalloc(sizeof(*it), GFP_NOFS); |
| @@ -741,8 +720,8 @@ static int ll_create_it(struct inode *dir, struct dentry *dentry, int mode, | |||
| 741 | struct inode *inode; | 720 | struct inode *inode; |
| 742 | int rc = 0; | 721 | int rc = 0; |
| 743 | 722 | ||
| 744 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),intent=%s\n", | 723 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p),intent=%s\n", |
| 745 | dentry->d_name.len, dentry->d_name.name, dir->i_ino, | 724 | dentry, dir->i_ino, |
| 746 | dir->i_generation, dir, LL_IT2STR(it)); | 725 | dir->i_generation, dir, LL_IT2STR(it)); |
| 747 | 726 | ||
| 748 | rc = it_open_error(DISP_OPEN_CREATE, it); | 727 | rc = it_open_error(DISP_OPEN_CREATE, it); |
| @@ -775,9 +754,9 @@ static void ll_update_times(struct ptlrpc_request *request, | |||
| 775 | LTIME_S(inode->i_ctime) = body->ctime; | 754 | LTIME_S(inode->i_ctime) = body->ctime; |
| 776 | } | 755 | } |
| 777 | 756 | ||
| 778 | static int ll_new_node(struct inode *dir, struct qstr *name, | 757 | static int ll_new_node(struct inode *dir, struct dentry *dentry, |
| 779 | const char *tgt, int mode, int rdev, | 758 | const char *tgt, int mode, int rdev, |
| 780 | struct dentry *dchild, __u32 opc) | 759 | __u32 opc) |
| 781 | { | 760 | { |
| 782 | struct ptlrpc_request *request = NULL; | 761 | struct ptlrpc_request *request = NULL; |
| 783 | struct md_op_data *op_data; | 762 | struct md_op_data *op_data; |
| @@ -789,8 +768,10 @@ static int ll_new_node(struct inode *dir, struct qstr *name, | |||
| 789 | if (unlikely(tgt != NULL)) | 768 | if (unlikely(tgt != NULL)) |
| 790 | tgt_len = strlen(tgt) + 1; | 769 | tgt_len = strlen(tgt) + 1; |
| 791 | 770 | ||
| 792 | op_data = ll_prep_md_op_data(NULL, dir, NULL, name->name, | 771 | op_data = ll_prep_md_op_data(NULL, dir, NULL, |
| 793 | name->len, 0, opc, NULL); | 772 | dentry->d_name.name, |
| 773 | dentry->d_name.len, | ||
| 774 | 0, opc, NULL); | ||
| 794 | if (IS_ERR(op_data)) { | 775 | if (IS_ERR(op_data)) { |
| 795 | err = PTR_ERR(op_data); | 776 | err = PTR_ERR(op_data); |
| 796 | goto err_exit; | 777 | goto err_exit; |
| @@ -806,27 +787,25 @@ static int ll_new_node(struct inode *dir, struct qstr *name, | |||
| 806 | 787 | ||
| 807 | ll_update_times(request, dir); | 788 | ll_update_times(request, dir); |
| 808 | 789 | ||
| 809 | if (dchild) { | 790 | err = ll_prep_inode(&inode, request, dir->i_sb, NULL); |
| 810 | err = ll_prep_inode(&inode, request, dchild->d_sb, NULL); | 791 | if (err) |
| 811 | if (err) | 792 | goto err_exit; |
| 812 | goto err_exit; | ||
| 813 | 793 | ||
| 814 | d_instantiate(dchild, inode); | 794 | d_instantiate(dentry, inode); |
| 815 | } | ||
| 816 | err_exit: | 795 | err_exit: |
| 817 | ptlrpc_req_finished(request); | 796 | ptlrpc_req_finished(request); |
| 818 | 797 | ||
| 819 | return err; | 798 | return err; |
| 820 | } | 799 | } |
| 821 | 800 | ||
| 822 | static int ll_mknod_generic(struct inode *dir, struct qstr *name, int mode, | 801 | static int ll_mknod(struct inode *dir, struct dentry *dchild, |
| 823 | unsigned rdev, struct dentry *dchild) | 802 | umode_t mode, dev_t rdev) |
| 824 | { | 803 | { |
| 825 | int err; | 804 | int err; |
| 826 | 805 | ||
| 827 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p) mode %o dev %x\n", | 806 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p) mode %o dev %x\n", |
| 828 | name->len, name->name, dir->i_ino, dir->i_generation, dir, | 807 | dchild, dir->i_ino, dir->i_generation, dir, |
| 829 | mode, rdev); | 808 | mode, old_encode_dev(rdev)); |
| 830 | 809 | ||
| 831 | if (!IS_POSIXACL(dir) || !exp_connect_umask(ll_i2mdexp(dir))) | 810 | if (!IS_POSIXACL(dir) || !exp_connect_umask(ll_i2mdexp(dir))) |
| 832 | mode &= ~current_umask(); | 811 | mode &= ~current_umask(); |
| @@ -839,7 +818,8 @@ static int ll_mknod_generic(struct inode *dir, struct qstr *name, int mode, | |||
| 839 | case S_IFBLK: | 818 | case S_IFBLK: |
| 840 | case S_IFIFO: | 819 | case S_IFIFO: |
| 841 | case S_IFSOCK: | 820 | case S_IFSOCK: |
| 842 | err = ll_new_node(dir, name, NULL, mode, rdev, dchild, | 821 | err = ll_new_node(dir, dchild, NULL, mode, |
| 822 | old_encode_dev(rdev), | ||
| 843 | LUSTRE_OPC_MKNOD); | 823 | LUSTRE_OPC_MKNOD); |
| 844 | break; | 824 | break; |
| 845 | case S_IFDIR: | 825 | case S_IFDIR: |
| @@ -863,134 +843,25 @@ static int ll_create_nd(struct inode *dir, struct dentry *dentry, | |||
| 863 | { | 843 | { |
| 864 | int rc; | 844 | int rc; |
| 865 | 845 | ||
| 866 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)," | 846 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p)," |
| 867 | "flags=%u, excl=%d\n", | 847 | "flags=%u, excl=%d\n", |
| 868 | dentry->d_name.len, dentry->d_name.name, dir->i_ino, | 848 | dentry, dir->i_ino, |
| 869 | dir->i_generation, dir, mode, want_excl); | 849 | dir->i_generation, dir, mode, want_excl); |
| 870 | 850 | ||
| 871 | rc = ll_mknod_generic(dir, &dentry->d_name, mode, 0, dentry); | 851 | rc = ll_mknod(dir, dentry, mode, 0); |
| 872 | 852 | ||
| 873 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_CREATE, 1); | 853 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_CREATE, 1); |
| 874 | 854 | ||
| 875 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s, unhashed %d\n", | 855 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd, unhashed %d\n", |
| 876 | dentry->d_name.len, dentry->d_name.name, d_unhashed(dentry)); | 856 | dentry, d_unhashed(dentry)); |
| 877 | 857 | ||
| 878 | return rc; | 858 | return rc; |
| 879 | } | 859 | } |
| 880 | 860 | ||
| 881 | static int ll_symlink_generic(struct inode *dir, struct qstr *name, | 861 | static inline void ll_get_child_fid(struct dentry *child, struct lu_fid *fid) |
| 882 | const char *tgt, struct dentry *dchild) | ||
| 883 | { | 862 | { |
| 884 | int err; | 863 | if (child->d_inode) |
| 885 | 864 | *fid = *ll_inode2fid(child->d_inode); | |
| 886 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p),target=%.*s\n", | ||
| 887 | name->len, name->name, dir->i_ino, dir->i_generation, | ||
| 888 | dir, 3000, tgt); | ||
| 889 | |||
| 890 | err = ll_new_node(dir, name, (char *)tgt, S_IFLNK | S_IRWXUGO, | ||
| 891 | 0, dchild, LUSTRE_OPC_SYMLINK); | ||
| 892 | |||
| 893 | if (!err) | ||
| 894 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_SYMLINK, 1); | ||
| 895 | |||
| 896 | return err; | ||
| 897 | } | ||
| 898 | |||
| 899 | static int ll_link_generic(struct inode *src, struct inode *dir, | ||
| 900 | struct qstr *name, struct dentry *dchild) | ||
| 901 | { | ||
| 902 | struct ll_sb_info *sbi = ll_i2sbi(dir); | ||
| 903 | struct ptlrpc_request *request = NULL; | ||
| 904 | struct md_op_data *op_data; | ||
| 905 | int err; | ||
| 906 | |||
| 907 | CDEBUG(D_VFSTRACE, | ||
| 908 | "VFS Op: inode=%lu/%u(%p), dir=%lu/%u(%p), target=%.*s\n", | ||
| 909 | src->i_ino, src->i_generation, src, dir->i_ino, | ||
| 910 | dir->i_generation, dir, name->len, name->name); | ||
| 911 | |||
| 912 | op_data = ll_prep_md_op_data(NULL, src, dir, name->name, name->len, | ||
| 913 | 0, LUSTRE_OPC_ANY, NULL); | ||
| 914 | if (IS_ERR(op_data)) | ||
| 915 | return PTR_ERR(op_data); | ||
| 916 | |||
| 917 | err = md_link(sbi->ll_md_exp, op_data, &request); | ||
| 918 | ll_finish_md_op_data(op_data); | ||
| 919 | if (err) | ||
| 920 | goto out; | ||
| 921 | |||
| 922 | ll_update_times(request, dir); | ||
| 923 | ll_stats_ops_tally(sbi, LPROC_LL_LINK, 1); | ||
| 924 | out: | ||
| 925 | ptlrpc_req_finished(request); | ||
| 926 | return err; | ||
| 927 | } | ||
| 928 | |||
| 929 | static int ll_mkdir_generic(struct inode *dir, struct qstr *name, | ||
| 930 | int mode, struct dentry *dchild) | ||
| 931 | |||
| 932 | { | ||
| 933 | int err; | ||
| 934 | |||
| 935 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", | ||
| 936 | name->len, name->name, dir->i_ino, dir->i_generation, dir); | ||
| 937 | |||
| 938 | if (!IS_POSIXACL(dir) || !exp_connect_umask(ll_i2mdexp(dir))) | ||
| 939 | mode &= ~current_umask(); | ||
| 940 | mode = (mode & (S_IRWXUGO|S_ISVTX)) | S_IFDIR; | ||
| 941 | err = ll_new_node(dir, name, NULL, mode, 0, dchild, LUSTRE_OPC_MKDIR); | ||
| 942 | |||
| 943 | if (!err) | ||
| 944 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_MKDIR, 1); | ||
| 945 | |||
| 946 | return err; | ||
| 947 | } | ||
| 948 | |||
| 949 | /* Try to find the child dentry by its name. | ||
| 950 | If found, put the result fid into @fid. */ | ||
| 951 | static void ll_get_child_fid(struct inode * dir, struct qstr *name, | ||
| 952 | struct lu_fid *fid) | ||
| 953 | { | ||
| 954 | struct dentry *parent, *child; | ||
| 955 | |||
| 956 | parent = ll_d_hlist_entry(dir->i_dentry, struct dentry, d_u.d_alias); | ||
| 957 | child = d_lookup(parent, name); | ||
| 958 | if (child) { | ||
| 959 | if (child->d_inode) | ||
| 960 | *fid = *ll_inode2fid(child->d_inode); | ||
| 961 | dput(child); | ||
| 962 | } | ||
| 963 | } | ||
| 964 | |||
| 965 | static int ll_rmdir_generic(struct inode *dir, struct dentry *dparent, | ||
| 966 | struct dentry *dchild, struct qstr *name) | ||
| 967 | { | ||
| 968 | struct ptlrpc_request *request = NULL; | ||
| 969 | struct md_op_data *op_data; | ||
| 970 | int rc; | ||
| 971 | |||
| 972 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", | ||
| 973 | name->len, name->name, dir->i_ino, dir->i_generation, dir); | ||
| 974 | |||
| 975 | if (unlikely(ll_d_mountpoint(dparent, dchild, name))) | ||
| 976 | return -EBUSY; | ||
| 977 | |||
| 978 | op_data = ll_prep_md_op_data(NULL, dir, NULL, name->name, name->len, | ||
| 979 | S_IFDIR, LUSTRE_OPC_ANY, NULL); | ||
| 980 | if (IS_ERR(op_data)) | ||
| 981 | return PTR_ERR(op_data); | ||
| 982 | |||
| 983 | ll_get_child_fid(dir, name, &op_data->op_fid3); | ||
| 984 | op_data->op_fid2 = op_data->op_fid3; | ||
| 985 | rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request); | ||
| 986 | ll_finish_md_op_data(op_data); | ||
| 987 | if (rc == 0) { | ||
| 988 | ll_update_times(request, dir); | ||
| 989 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_RMDIR, 1); | ||
| 990 | } | ||
| 991 | |||
| 992 | ptlrpc_req_finished(request); | ||
| 993 | return rc; | ||
| 994 | } | 865 | } |
| 995 | 866 | ||
| 996 | /** | 867 | /** |
| @@ -1099,32 +970,26 @@ out: | |||
| 1099 | return rc; | 970 | return rc; |
| 1100 | } | 971 | } |
| 1101 | 972 | ||
| 1102 | /* ll_unlink_generic() doesn't update the inode with the new link count. | 973 | /* ll_unlink() doesn't update the inode with the new link count. |
| 1103 | * Instead, ll_ddelete() and ll_d_iput() will update it based upon if there | 974 | * Instead, ll_ddelete() and ll_d_iput() will update it based upon if there |
| 1104 | * is any lock existing. They will recycle dentries and inodes based upon locks | 975 | * is any lock existing. They will recycle dentries and inodes based upon locks |
| 1105 | * too. b=20433 */ | 976 | * too. b=20433 */ |
| 1106 | static int ll_unlink_generic(struct inode *dir, struct dentry *dparent, | 977 | static int ll_unlink(struct inode * dir, struct dentry *dentry) |
| 1107 | struct dentry *dchild, struct qstr *name) | ||
| 1108 | { | 978 | { |
| 1109 | struct ptlrpc_request *request = NULL; | 979 | struct ptlrpc_request *request = NULL; |
| 1110 | struct md_op_data *op_data; | 980 | struct md_op_data *op_data; |
| 1111 | int rc; | 981 | int rc; |
| 1112 | CDEBUG(D_VFSTRACE, "VFS Op:name=%.*s,dir=%lu/%u(%p)\n", | 982 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p)\n", |
| 1113 | name->len, name->name, dir->i_ino, dir->i_generation, dir); | 983 | dentry, dir->i_ino, dir->i_generation, dir); |
| 1114 | |||
| 1115 | /* | ||
| 1116 | * XXX: unlink bind mountpoint maybe call to here, | ||
| 1117 | * just check it as vfs_unlink does. | ||
| 1118 | */ | ||
| 1119 | if (unlikely(ll_d_mountpoint(dparent, dchild, name))) | ||
| 1120 | return -EBUSY; | ||
| 1121 | 984 | ||
| 1122 | op_data = ll_prep_md_op_data(NULL, dir, NULL, name->name, | 985 | op_data = ll_prep_md_op_data(NULL, dir, NULL, |
| 1123 | name->len, 0, LUSTRE_OPC_ANY, NULL); | 986 | dentry->d_name.name, |
| 987 | dentry->d_name.len, | ||
| 988 | 0, LUSTRE_OPC_ANY, NULL); | ||
| 1124 | if (IS_ERR(op_data)) | 989 | if (IS_ERR(op_data)) |
| 1125 | return PTR_ERR(op_data); | 990 | return PTR_ERR(op_data); |
| 1126 | 991 | ||
| 1127 | ll_get_child_fid(dir, name, &op_data->op_fid3); | 992 | ll_get_child_fid(dentry, &op_data->op_fid3); |
| 1128 | op_data->op_fid2 = op_data->op_fid3; | 993 | op_data->op_fid2 = op_data->op_fid3; |
| 1129 | rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request); | 994 | rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request); |
| 1130 | ll_finish_md_op_data(op_data); | 995 | ll_finish_md_op_data(op_data); |
| @@ -1140,95 +1005,140 @@ static int ll_unlink_generic(struct inode *dir, struct dentry *dparent, | |||
| 1140 | return rc; | 1005 | return rc; |
| 1141 | } | 1006 | } |
| 1142 | 1007 | ||
| 1143 | static int ll_rename_generic(struct inode *src, struct dentry *src_dparent, | 1008 | static int ll_mkdir(struct inode *dir, struct dentry *dentry, ll_umode_t mode) |
| 1144 | struct dentry *src_dchild, struct qstr *src_name, | ||
| 1145 | struct inode *tgt, struct dentry *tgt_dparent, | ||
| 1146 | struct dentry *tgt_dchild, struct qstr *tgt_name) | ||
| 1147 | { | 1009 | { |
| 1148 | struct ptlrpc_request *request = NULL; | ||
| 1149 | struct ll_sb_info *sbi = ll_i2sbi(src); | ||
| 1150 | struct md_op_data *op_data; | ||
| 1151 | int err; | 1010 | int err; |
| 1152 | 1011 | ||
| 1153 | CDEBUG(D_VFSTRACE, | 1012 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p)\n", |
| 1154 | "VFS Op:oldname=%.*s,src_dir=%lu/%u(%p),newname=%.*s," | 1013 | dentry, dir->i_ino, dir->i_generation, dir); |
| 1155 | "tgt_dir=%lu/%u(%p)\n", src_name->len, src_name->name, | ||
| 1156 | src->i_ino, src->i_generation, src, tgt_name->len, | ||
| 1157 | tgt_name->name, tgt->i_ino, tgt->i_generation, tgt); | ||
| 1158 | 1014 | ||
| 1159 | if (unlikely(ll_d_mountpoint(src_dparent, src_dchild, src_name) || | 1015 | if (!IS_POSIXACL(dir) || !exp_connect_umask(ll_i2mdexp(dir))) |
| 1160 | ll_d_mountpoint(tgt_dparent, tgt_dchild, tgt_name))) | 1016 | mode &= ~current_umask(); |
| 1161 | return -EBUSY; | 1017 | mode = (mode & (S_IRWXUGO|S_ISVTX)) | S_IFDIR; |
| 1018 | err = ll_new_node(dir, dentry, NULL, mode, 0, LUSTRE_OPC_MKDIR); | ||
| 1162 | 1019 | ||
| 1163 | op_data = ll_prep_md_op_data(NULL, src, tgt, NULL, 0, 0, | 1020 | if (!err) |
| 1164 | LUSTRE_OPC_ANY, NULL); | 1021 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_MKDIR, 1); |
| 1022 | |||
| 1023 | return err; | ||
| 1024 | } | ||
| 1025 | |||
| 1026 | static int ll_rmdir(struct inode *dir, struct dentry *dentry) | ||
| 1027 | { | ||
| 1028 | struct ptlrpc_request *request = NULL; | ||
| 1029 | struct md_op_data *op_data; | ||
| 1030 | int rc; | ||
| 1031 | |||
| 1032 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p)\n", | ||
| 1033 | dentry, dir->i_ino, dir->i_generation, dir); | ||
| 1034 | |||
| 1035 | op_data = ll_prep_md_op_data(NULL, dir, NULL, | ||
| 1036 | dentry->d_name.name, | ||
| 1037 | dentry->d_name.len, | ||
| 1038 | S_IFDIR, LUSTRE_OPC_ANY, NULL); | ||
| 1165 | if (IS_ERR(op_data)) | 1039 | if (IS_ERR(op_data)) |
| 1166 | return PTR_ERR(op_data); | 1040 | return PTR_ERR(op_data); |
| 1167 | 1041 | ||
| 1168 | ll_get_child_fid(src, src_name, &op_data->op_fid3); | 1042 | ll_get_child_fid(dentry, &op_data->op_fid3); |
| 1169 | ll_get_child_fid(tgt, tgt_name, &op_data->op_fid4); | 1043 | op_data->op_fid2 = op_data->op_fid3; |
| 1170 | err = md_rename(sbi->ll_md_exp, op_data, | 1044 | rc = md_unlink(ll_i2sbi(dir)->ll_md_exp, op_data, &request); |
| 1171 | src_name->name, src_name->len, | ||
| 1172 | tgt_name->name, tgt_name->len, &request); | ||
| 1173 | ll_finish_md_op_data(op_data); | 1045 | ll_finish_md_op_data(op_data); |
| 1174 | if (!err) { | 1046 | if (rc == 0) { |
| 1175 | ll_update_times(request, src); | 1047 | ll_update_times(request, dir); |
| 1176 | ll_update_times(request, tgt); | 1048 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_RMDIR, 1); |
| 1177 | ll_stats_ops_tally(sbi, LPROC_LL_RENAME, 1); | ||
| 1178 | err = ll_objects_destroy(request, src); | ||
| 1179 | } | 1049 | } |
| 1180 | 1050 | ||
| 1181 | ptlrpc_req_finished(request); | 1051 | ptlrpc_req_finished(request); |
| 1182 | 1052 | return rc; | |
| 1183 | return err; | ||
| 1184 | } | 1053 | } |
| 1185 | 1054 | ||
| 1186 | static int ll_mknod(struct inode *dir, struct dentry *dchild, ll_umode_t mode, | 1055 | static int ll_symlink(struct inode *dir, struct dentry *dentry, |
| 1187 | dev_t rdev) | 1056 | const char *oldname) |
| 1188 | { | 1057 | { |
| 1189 | return ll_mknod_generic(dir, &dchild->d_name, mode, | 1058 | int err; |
| 1190 | old_encode_dev(rdev), dchild); | ||
| 1191 | } | ||
| 1192 | 1059 | ||
| 1193 | static int ll_unlink(struct inode * dir, struct dentry *dentry) | 1060 | CDEBUG(D_VFSTRACE, "VFS Op:name=%pd,dir=%lu/%u(%p),target=%.*s\n", |
| 1194 | { | 1061 | dentry, dir->i_ino, dir->i_generation, |
| 1195 | return ll_unlink_generic(dir, NULL, dentry, &dentry->d_name); | 1062 | dir, 3000, oldname); |
| 1196 | } | ||
| 1197 | 1063 | ||
| 1198 | static int ll_mkdir(struct inode *dir, struct dentry *dentry, ll_umode_t mode) | 1064 | err = ll_new_node(dir, dentry, oldname, S_IFLNK | S_IRWXUGO, |
| 1199 | { | 1065 | 0, LUSTRE_OPC_SYMLINK); |
| 1200 | return ll_mkdir_generic(dir, &dentry->d_name, mode, dentry); | ||
| 1201 | } | ||
| 1202 | 1066 | ||
| 1203 | static int ll_rmdir(struct inode *dir, struct dentry *dentry) | 1067 | if (!err) |
| 1204 | { | 1068 | ll_stats_ops_tally(ll_i2sbi(dir), LPROC_LL_SYMLINK, 1); |
| 1205 | return ll_rmdir_generic(dir, NULL, dentry, &dentry->d_name); | ||
| 1206 | } | ||
| 1207 | 1069 | ||
| 1208 | static int ll_symlink(struct inode *dir, struct dentry *dentry, | 1070 | return err; |
| 1209 | const char *oldname) | ||
| 1210 | { | ||
| 1211 | return ll_symlink_generic(dir, &dentry->d_name, oldname, dentry); | ||
| 1212 | } | 1071 | } |
| 1213 | 1072 | ||
| 1214 | static int ll_link(struct dentry *old_dentry, struct inode *dir, | 1073 | static int ll_link(struct dentry *old_dentry, struct inode *dir, |
| 1215 | struct dentry *new_dentry) | 1074 | struct dentry *new_dentry) |
| 1216 | { | 1075 | { |
| 1217 | return ll_link_generic(old_dentry->d_inode, dir, &new_dentry->d_name, | 1076 | struct inode *src = old_dentry->d_inode; |
| 1218 | new_dentry); | 1077 | struct ll_sb_info *sbi = ll_i2sbi(dir); |
| 1078 | struct ptlrpc_request *request = NULL; | ||
| 1079 | struct md_op_data *op_data; | ||
| 1080 | int err; | ||
| 1081 | |||
| 1082 | CDEBUG(D_VFSTRACE, | ||
| 1083 | "VFS Op: inode=%lu/%u(%p), dir=%lu/%u(%p), target=%pd\n", | ||
| 1084 | src->i_ino, src->i_generation, src, dir->i_ino, | ||
| 1085 | dir->i_generation, dir, new_dentry); | ||
| 1086 | |||
| 1087 | op_data = ll_prep_md_op_data(NULL, src, dir, new_dentry->d_name.name, | ||
| 1088 | new_dentry->d_name.len, | ||
| 1089 | 0, LUSTRE_OPC_ANY, NULL); | ||
| 1090 | if (IS_ERR(op_data)) | ||
| 1091 | return PTR_ERR(op_data); | ||
| 1092 | |||
| 1093 | err = md_link(sbi->ll_md_exp, op_data, &request); | ||
| 1094 | ll_finish_md_op_data(op_data); | ||
| 1095 | if (err) | ||
| 1096 | goto out; | ||
| 1097 | |||
| 1098 | ll_update_times(request, dir); | ||
| 1099 | ll_stats_ops_tally(sbi, LPROC_LL_LINK, 1); | ||
| 1100 | out: | ||
| 1101 | ptlrpc_req_finished(request); | ||
| 1102 | return err; | ||
| 1219 | } | 1103 | } |
| 1220 | 1104 | ||
| 1221 | static int ll_rename(struct inode *old_dir, struct dentry *old_dentry, | 1105 | static int ll_rename(struct inode *old_dir, struct dentry *old_dentry, |
| 1222 | struct inode *new_dir, struct dentry *new_dentry) | 1106 | struct inode *new_dir, struct dentry *new_dentry) |
| 1223 | { | 1107 | { |
| 1108 | struct ptlrpc_request *request = NULL; | ||
| 1109 | struct ll_sb_info *sbi = ll_i2sbi(old_dir); | ||
| 1110 | struct md_op_data *op_data; | ||
| 1224 | int err; | 1111 | int err; |
| 1225 | err = ll_rename_generic(old_dir, NULL, | 1112 | |
| 1226 | old_dentry, &old_dentry->d_name, | 1113 | CDEBUG(D_VFSTRACE, |
| 1227 | new_dir, NULL, new_dentry, | 1114 | "VFS Op:oldname=%pd,src_dir=%lu/%u(%p),newname=%pd," |
| 1228 | &new_dentry->d_name); | 1115 | "tgt_dir=%lu/%u(%p)\n", old_dentry, |
| 1116 | old_dir->i_ino, old_dir->i_generation, old_dir, new_dentry, | ||
| 1117 | new_dir->i_ino, new_dir->i_generation, new_dir); | ||
| 1118 | |||
| 1119 | op_data = ll_prep_md_op_data(NULL, old_dir, new_dir, NULL, 0, 0, | ||
| 1120 | LUSTRE_OPC_ANY, NULL); | ||
| 1121 | if (IS_ERR(op_data)) | ||
| 1122 | return PTR_ERR(op_data); | ||
| 1123 | |||
| 1124 | ll_get_child_fid(old_dentry, &op_data->op_fid3); | ||
| 1125 | ll_get_child_fid(new_dentry, &op_data->op_fid4); | ||
| 1126 | err = md_rename(sbi->ll_md_exp, op_data, | ||
| 1127 | old_dentry->d_name.name, | ||
| 1128 | old_dentry->d_name.len, | ||
| 1129 | new_dentry->d_name.name, | ||
| 1130 | new_dentry->d_name.len, &request); | ||
| 1131 | ll_finish_md_op_data(op_data); | ||
| 1229 | if (!err) { | 1132 | if (!err) { |
| 1230 | d_move(old_dentry, new_dentry); | 1133 | ll_update_times(request, old_dir); |
| 1134 | ll_update_times(request, new_dir); | ||
| 1135 | ll_stats_ops_tally(sbi, LPROC_LL_RENAME, 1); | ||
| 1136 | err = ll_objects_destroy(request, old_dir); | ||
| 1231 | } | 1137 | } |
| 1138 | |||
| 1139 | ptlrpc_req_finished(request); | ||
| 1140 | if (!err) | ||
| 1141 | d_move(old_dentry, new_dentry); | ||
| 1232 | return err; | 1142 | return err; |
| 1233 | } | 1143 | } |
| 1234 | 1144 | ||
diff --git a/drivers/staging/lustre/lustre/llite/statahead.c b/drivers/staging/lustre/lustre/llite/statahead.c index 06b71bcf97a7..09d965e76842 100644 --- a/drivers/staging/lustre/lustre/llite/statahead.c +++ b/drivers/staging/lustre/lustre/llite/statahead.c | |||
| @@ -969,8 +969,8 @@ static int ll_agl_thread(void *arg) | |||
| 969 | struct l_wait_info lwi = { 0 }; | 969 | struct l_wait_info lwi = { 0 }; |
| 970 | 970 | ||
| 971 | thread->t_pid = current_pid(); | 971 | thread->t_pid = current_pid(); |
| 972 | CDEBUG(D_READA, "agl thread started: sai %p, parent %.*s\n", | 972 | CDEBUG(D_READA, "agl thread started: sai %p, parent %pd\n", |
| 973 | sai, parent->d_name.len, parent->d_name.name); | 973 | sai, parent); |
| 974 | 974 | ||
| 975 | atomic_inc(&sbi->ll_agl_total); | 975 | atomic_inc(&sbi->ll_agl_total); |
| 976 | spin_lock(&plli->lli_agl_lock); | 976 | spin_lock(&plli->lli_agl_lock); |
| @@ -1019,8 +1019,8 @@ static int ll_agl_thread(void *arg) | |||
| 1019 | spin_unlock(&plli->lli_agl_lock); | 1019 | spin_unlock(&plli->lli_agl_lock); |
| 1020 | wake_up(&thread->t_ctl_waitq); | 1020 | wake_up(&thread->t_ctl_waitq); |
| 1021 | ll_sai_put(sai); | 1021 | ll_sai_put(sai); |
| 1022 | CDEBUG(D_READA, "agl thread stopped: sai %p, parent %.*s\n", | 1022 | CDEBUG(D_READA, "agl thread stopped: sai %p, parent %pd\n", |
| 1023 | sai, parent->d_name.len, parent->d_name.name); | 1023 | sai, parent); |
| 1024 | return 0; | 1024 | return 0; |
| 1025 | } | 1025 | } |
| 1026 | 1026 | ||
| @@ -1031,8 +1031,8 @@ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai) | |||
| 1031 | struct ll_inode_info *plli; | 1031 | struct ll_inode_info *plli; |
| 1032 | struct task_struct *task; | 1032 | struct task_struct *task; |
| 1033 | 1033 | ||
| 1034 | CDEBUG(D_READA, "start agl thread: sai %p, parent %.*s\n", | 1034 | CDEBUG(D_READA, "start agl thread: sai %p, parent %pd\n", |
| 1035 | sai, parent->d_name.len, parent->d_name.name); | 1035 | sai, parent); |
| 1036 | 1036 | ||
| 1037 | plli = ll_i2info(parent->d_inode); | 1037 | plli = ll_i2info(parent->d_inode); |
| 1038 | task = kthread_run(ll_agl_thread, parent, | 1038 | task = kthread_run(ll_agl_thread, parent, |
| @@ -1066,8 +1066,8 @@ static int ll_statahead_thread(void *arg) | |||
| 1066 | struct l_wait_info lwi = { 0 }; | 1066 | struct l_wait_info lwi = { 0 }; |
| 1067 | 1067 | ||
| 1068 | thread->t_pid = current_pid(); | 1068 | thread->t_pid = current_pid(); |
| 1069 | CDEBUG(D_READA, "statahead thread starting: sai %p, parent %.*s\n", | 1069 | CDEBUG(D_READA, "statahead thread starting: sai %p, parent %pd\n", |
| 1070 | sai, parent->d_name.len, parent->d_name.name); | 1070 | sai, parent); |
| 1071 | 1071 | ||
| 1072 | if (sbi->ll_flags & LL_SBI_AGL_ENABLED) | 1072 | if (sbi->ll_flags & LL_SBI_AGL_ENABLED) |
| 1073 | ll_start_agl(parent, sai); | 1073 | ll_start_agl(parent, sai); |
| @@ -1288,8 +1288,8 @@ out: | |||
| 1288 | wake_up(&thread->t_ctl_waitq); | 1288 | wake_up(&thread->t_ctl_waitq); |
| 1289 | ll_sai_put(sai); | 1289 | ll_sai_put(sai); |
| 1290 | dput(parent); | 1290 | dput(parent); |
| 1291 | CDEBUG(D_READA, "statahead thread stopped: sai %p, parent %.*s\n", | 1291 | CDEBUG(D_READA, "statahead thread stopped: sai %p, parent %pd\n", |
| 1292 | sai, parent->d_name.len, parent->d_name.name); | 1292 | sai, parent); |
| 1293 | return rc; | 1293 | return rc; |
| 1294 | } | 1294 | } |
| 1295 | 1295 | ||
| @@ -1612,10 +1612,9 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp, | |||
| 1612 | } else if ((*dentryp)->d_inode != inode) { | 1612 | } else if ((*dentryp)->d_inode != inode) { |
| 1613 | /* revalidate, but inode is recreated */ | 1613 | /* revalidate, but inode is recreated */ |
| 1614 | CDEBUG(D_READA, | 1614 | CDEBUG(D_READA, |
| 1615 | "stale dentry %.*s inode %lu/%u, " | 1615 | "stale dentry %pd inode %lu/%u, " |
| 1616 | "statahead inode %lu/%u\n", | 1616 | "statahead inode %lu/%u\n", |
| 1617 | (*dentryp)->d_name.len, | 1617 | *dentryp, |
| 1618 | (*dentryp)->d_name.name, | ||
| 1619 | (*dentryp)->d_inode->i_ino, | 1618 | (*dentryp)->d_inode->i_ino, |
| 1620 | (*dentryp)->d_inode->i_generation, | 1619 | (*dentryp)->d_inode->i_generation, |
| 1621 | inode->i_ino, | 1620 | inode->i_ino, |
| @@ -1666,9 +1665,9 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp, | |||
| 1666 | if (unlikely(sai->sai_inode != parent->d_inode)) { | 1665 | if (unlikely(sai->sai_inode != parent->d_inode)) { |
| 1667 | struct ll_inode_info *nlli = ll_i2info(parent->d_inode); | 1666 | struct ll_inode_info *nlli = ll_i2info(parent->d_inode); |
| 1668 | 1667 | ||
| 1669 | CWARN("Race condition, someone changed %.*s just now: " | 1668 | CWARN("Race condition, someone changed %pd just now: " |
| 1670 | "old parent "DFID", new parent "DFID"\n", | 1669 | "old parent "DFID", new parent "DFID"\n", |
| 1671 | (*dentryp)->d_name.len, (*dentryp)->d_name.name, | 1670 | *dentryp, |
| 1672 | PFID(&lli->lli_fid), PFID(&nlli->lli_fid)); | 1671 | PFID(&lli->lli_fid), PFID(&nlli->lli_fid)); |
| 1673 | dput(parent); | 1672 | dput(parent); |
| 1674 | iput(sai->sai_inode); | 1673 | iput(sai->sai_inode); |
| @@ -1676,8 +1675,8 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp, | |||
| 1676 | goto out; | 1675 | goto out; |
| 1677 | } | 1676 | } |
| 1678 | 1677 | ||
| 1679 | CDEBUG(D_READA, "start statahead thread: sai %p, parent %.*s\n", | 1678 | CDEBUG(D_READA, "start statahead thread: sai %p, parent %pd\n", |
| 1680 | sai, parent->d_name.len, parent->d_name.name); | 1679 | sai, parent); |
| 1681 | 1680 | ||
| 1682 | /* The sai buffer already has one reference taken at allocation time, | 1681 | /* The sai buffer already has one reference taken at allocation time, |
| 1683 | * but as soon as we expose the sai by attaching it to the lli that | 1682 | * but as soon as we expose the sai by attaching it to the lli that |
diff --git a/drivers/staging/lustre/lustre/llite/vvp_io.c b/drivers/staging/lustre/lustre/llite/vvp_io.c index d3f967a78138..e540a6d286f8 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_io.c +++ b/drivers/staging/lustre/lustre/llite/vvp_io.c | |||
| @@ -108,7 +108,7 @@ static int vvp_io_fault_iter_init(const struct lu_env *env, | |||
| 108 | struct inode *inode = ccc_object_inode(ios->cis_obj); | 108 | struct inode *inode = ccc_object_inode(ios->cis_obj); |
| 109 | 109 | ||
| 110 | LASSERT(inode == | 110 | LASSERT(inode == |
| 111 | cl2ccc_io(env, ios)->cui_fd->fd_file->f_dentry->d_inode); | 111 | file_inode(cl2ccc_io(env, ios)->cui_fd->fd_file)); |
| 112 | vio->u.fault.ft_mtime = LTIME_S(inode->i_mtime); | 112 | vio->u.fault.ft_mtime = LTIME_S(inode->i_mtime); |
| 113 | return 0; | 113 | return 0; |
| 114 | } | 114 | } |
| @@ -239,7 +239,7 @@ static int vvp_mmap_locks(const struct lu_env *env, | |||
| 239 | 239 | ||
| 240 | down_read(&mm->mmap_sem); | 240 | down_read(&mm->mmap_sem); |
| 241 | while ((vma = our_vma(mm, addr, count)) != NULL) { | 241 | while ((vma = our_vma(mm, addr, count)) != NULL) { |
| 242 | struct inode *inode = vma->vm_file->f_dentry->d_inode; | 242 | struct inode *inode = file_inode(vma->vm_file); |
| 243 | int flags = CEF_MUST; | 243 | int flags = CEF_MUST; |
| 244 | 244 | ||
| 245 | if (ll_file_nolock(vma->vm_file)) { | 245 | if (ll_file_nolock(vma->vm_file)) { |
diff --git a/drivers/staging/lustre/lustre/llite/xattr.c b/drivers/staging/lustre/lustre/llite/xattr.c index 252a6194ed9b..3151baf5585c 100644 --- a/drivers/staging/lustre/lustre/llite/xattr.c +++ b/drivers/staging/lustre/lustre/llite/xattr.c | |||
| @@ -241,14 +241,11 @@ int ll_setxattr(struct dentry *dentry, const char *name, | |||
| 241 | lump->lmm_stripe_offset = -1; | 241 | lump->lmm_stripe_offset = -1; |
| 242 | 242 | ||
| 243 | if (lump != NULL && S_ISREG(inode->i_mode)) { | 243 | if (lump != NULL && S_ISREG(inode->i_mode)) { |
| 244 | struct file f; | ||
| 245 | int flags = FMODE_WRITE; | 244 | int flags = FMODE_WRITE; |
| 246 | int lum_size = (lump->lmm_magic == LOV_USER_MAGIC_V1) ? | 245 | int lum_size = (lump->lmm_magic == LOV_USER_MAGIC_V1) ? |
| 247 | sizeof(*lump) : sizeof(struct lov_user_md_v3); | 246 | sizeof(*lump) : sizeof(struct lov_user_md_v3); |
| 248 | 247 | ||
| 249 | memset(&f, 0, sizeof(f)); /* f.f_flags is used below */ | 248 | rc = ll_lov_setstripe_ea_info(inode, dentry, flags, lump, |
| 250 | f.f_dentry = dentry; | ||
| 251 | rc = ll_lov_setstripe_ea_info(inode, &f, flags, lump, | ||
| 252 | lum_size); | 249 | lum_size); |
| 253 | /* b10667: rc always be 0 here for now */ | 250 | /* b10667: rc always be 0 here for now */ |
| 254 | rc = 0; | 251 | rc = 0; |
| @@ -519,8 +516,8 @@ ssize_t ll_getxattr(struct dentry *dentry, const char *name, | |||
| 519 | } | 516 | } |
| 520 | 517 | ||
| 521 | if (size < lmmsize) { | 518 | if (size < lmmsize) { |
| 522 | CERROR("server bug: replied size %d > %d for %s (%s)\n", | 519 | CERROR("server bug: replied size %d > %d for %pd (%s)\n", |
| 523 | lmmsize, (int)size, dentry->d_name.name, name); | 520 | lmmsize, (int)size, dentry, name); |
| 524 | rc = -ERANGE; | 521 | rc = -ERANGE; |
| 525 | goto out; | 522 | goto out; |
| 526 | } | 523 | } |
