Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
e63fa0d4
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
e63fa0d4
编写于
11月 19, 2014
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-lustre' into for-next
上级
08d4f772
f76c23da
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
265 addition
and
376 deletion
+265
-376
drivers/staging/lustre/lustre/libcfs/tracefile.c
drivers/staging/lustre/lustre/libcfs/tracefile.c
+2
-2
drivers/staging/lustre/lustre/llite/dcache.c
drivers/staging/lustre/lustre/llite/dcache.c
+9
-10
drivers/staging/lustre/lustre/llite/dir.c
drivers/staging/lustre/lustre/llite/dir.c
+4
-5
drivers/staging/lustre/lustre/llite/file.c
drivers/staging/lustre/lustre/llite/file.c
+67
-79
drivers/staging/lustre/lustre/llite/llite_internal.h
drivers/staging/lustre/lustre/llite/llite_internal.h
+5
-5
drivers/staging/lustre/lustre/llite/llite_lib.c
drivers/staging/lustre/lustre/llite/llite_lib.c
+2
-4
drivers/staging/lustre/lustre/llite/llite_mmap.c
drivers/staging/lustre/lustre/llite/llite_mmap.c
+6
-6
drivers/staging/lustre/lustre/llite/lloop.c
drivers/staging/lustre/lustre/llite/lloop.c
+3
-4
drivers/staging/lustre/lustre/llite/namei.c
drivers/staging/lustre/lustre/llite/namei.c
+146
-236
drivers/staging/lustre/lustre/llite/statahead.c
drivers/staging/lustre/lustre/llite/statahead.c
+16
-17
drivers/staging/lustre/lustre/llite/vvp_io.c
drivers/staging/lustre/lustre/llite/vvp_io.c
+2
-2
drivers/staging/lustre/lustre/llite/xattr.c
drivers/staging/lustre/lustre/llite/xattr.c
+3
-6
未找到文件。
drivers/staging/lustre/lustre/libcfs/tracefile.c
浏览文件 @
e63fa0d4
...
...
@@ -1025,8 +1025,8 @@ static int tracefiled(void *arg)
if
(
f_pos
>=
(
off_t
)
cfs_tracefile_size
)
f_pos
=
0
;
else
if
(
f_pos
>
i_size_read
(
fil
p
->
f_dentry
->
d_inode
))
f_pos
=
i_size_read
(
fil
p
->
f_dentry
->
d_inode
);
else
if
(
f_pos
>
i_size_read
(
fil
e_inode
(
filp
)
))
f_pos
=
i_size_read
(
fil
e_inode
(
filp
)
);
buf
=
kmap
(
tage
->
page
);
rc
=
vfs_write
(
filp
,
(
__force
const
char
__user
*
)
buf
,
...
...
drivers/staging/lustre/lustre/llite/dcache.c
浏览文件 @
e63fa0d4
...
...
@@ -151,10 +151,10 @@ static int ll_ddelete(const struct dentry *de)
{
LASSERT
(
de
);
CDEBUG
(
D_DENTRY
,
"%s dentry %
.*s
(%p, parent %p, inode %p) %s%s
\n
"
,
CDEBUG
(
D_DENTRY
,
"%s dentry %
pd
(%p, parent %p, inode %p) %s%s
\n
"
,
d_lustre_invalid
((
struct
dentry
*
)
de
)
?
"deleting"
:
"keeping"
,
de
->
d_name
.
len
,
de
->
d_name
.
name
,
de
,
de
->
d_parent
,
de
->
d_inode
,
d_unhashed
(
(
struct
dentry
*
)
de
)
?
""
:
"hashed,"
,
de
,
de
,
de
->
d_parent
,
de
->
d_inode
,
d_unhashed
(
de
)
?
""
:
"hashed,"
,
list_empty
(
&
de
->
d_subdirs
)
?
""
:
"subdirs"
);
/* kernel >= 2.6.38 last refcount is decreased after this function. */
...
...
@@ -180,8 +180,8 @@ int ll_d_init(struct dentry *de)
{
LASSERT
(
de
!=
NULL
);
CDEBUG
(
D_DENTRY
,
"ldd on dentry %
.*s
(%p) parent %p inode %p refc %d
\n
"
,
de
->
d_name
.
len
,
de
->
d_name
.
name
,
de
,
de
->
d_parent
,
de
->
d_inode
,
CDEBUG
(
D_DENTRY
,
"ldd on dentry %
pd
(%p) parent %p inode %p refc %d
\n
"
,
de
,
de
,
de
->
d_parent
,
de
->
d_inode
,
d_count
(
de
));
if
(
de
->
d_fsdata
==
NULL
)
{
...
...
@@ -259,9 +259,8 @@ void ll_invalidate_aliases(struct inode *inode)
ll_lock_dcache
(
inode
);
ll_d_hlist_for_each_entry
(
dentry
,
p
,
&
inode
->
i_dentry
,
d_u
.
d_alias
)
{
CDEBUG
(
D_DENTRY
,
"dentry in drop %.*s (%p) parent %p "
"inode %p flags %d
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
dentry
,
dentry
->
d_parent
,
CDEBUG
(
D_DENTRY
,
"dentry in drop %pd (%p) parent %p "
"inode %p flags %d
\n
"
,
dentry
,
dentry
,
dentry
->
d_parent
,
dentry
->
d_inode
,
dentry
->
d_flags
);
if
(
unlikely
(
dentry
==
dentry
->
d_sb
->
s_root
))
{
...
...
@@ -352,8 +351,8 @@ static int ll_revalidate_nd(struct dentry *dentry, unsigned int flags)
{
int
rc
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
s
, flags=%u
\n
"
,
dentry
->
d_name
.
name
,
flags
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
, flags=%u
\n
"
,
dentry
,
flags
);
rc
=
ll_revalidate_dentry
(
dentry
,
flags
);
return
rc
;
...
...
drivers/staging/lustre/lustre/llite/dir.c
浏览文件 @
e63fa0d4
...
...
@@ -593,7 +593,7 @@ int ll_dir_read(struct inode *inode, struct dir_context *ctx)
static
int
ll_readdir
(
struct
file
*
filp
,
struct
dir_context
*
ctx
)
{
struct
inode
*
inode
=
fil
p
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
fil
e_inode
(
filp
)
;
struct
ll_file_data
*
lfd
=
LUSTRE_FPRIVATE
(
filp
);
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
inode
);
int
hash64
=
sbi
->
ll_flags
&
LL_SBI_64BIT_HASH
;
...
...
@@ -1242,7 +1242,7 @@ ll_getname(const char __user *filename)
static
long
ll_dir_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
inode
);
struct
obd_ioctl_data
*
data
;
int
rc
=
0
;
...
...
@@ -1389,7 +1389,7 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
return
-
EFAULT
;
}
if
(
i
node
->
i_sb
->
s_root
==
file
->
f_dentry
)
if
(
i
s_root_inode
(
inode
)
)
set_default
=
1
;
/* in v1 and v3 cases lumv1 points to data */
...
...
@@ -1780,8 +1780,7 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
return
ll_flush_ctx
(
inode
);
#ifdef CONFIG_FS_POSIX_ACL
case
LL_IOC_RMTACL
:
{
if
(
sbi
->
ll_flags
&
LL_SBI_RMT_CLIENT
&&
inode
==
inode
->
i_sb
->
s_root
->
d_inode
)
{
if
(
sbi
->
ll_flags
&
LL_SBI_RMT_CLIENT
&&
is_root_inode
(
inode
))
{
struct
ll_file_data
*
fd
=
LUSTRE_FPRIVATE
(
file
);
LASSERT
(
fd
!=
NULL
);
...
...
drivers/staging/lustre/lustre/llite/file.c
浏览文件 @
e63fa0d4
...
...
@@ -266,6 +266,10 @@ static int ll_md_close(struct obd_export *md_exp, struct inode *inode,
{
struct
ll_file_data
*
fd
=
LUSTRE_FPRIVATE
(
file
);
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
int
lockmode
;
__u64
flags
=
LDLM_FL_BLOCK_GRANTED
|
LDLM_FL_TEST_LOCK
;
struct
lustre_handle
lockh
;
ldlm_policy_data_t
policy
=
{.
l_inodebits
=
{
MDS_INODELOCK_OPEN
}};
int
rc
=
0
;
/* clear group lock, if present */
...
...
@@ -292,39 +296,26 @@ static int ll_md_close(struct obd_export *md_exp, struct inode *inode,
/* Let's see if we have good enough OPEN lock on the file and if
we can skip talking to MDS */
if
(
file
->
f_dentry
->
d_inode
)
{
/* Can this ever be false? */
int
lockmode
;
__u64
flags
=
LDLM_FL_BLOCK_GRANTED
|
LDLM_FL_TEST_LOCK
;
struct
lustre_handle
lockh
;
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
ldlm_policy_data_t
policy
=
{.
l_inodebits
=
{
MDS_INODELOCK_OPEN
}};
mutex_lock
(
&
lli
->
lli_och_mutex
);
if
(
fd
->
fd_omode
&
FMODE_WRITE
)
{
lockmode
=
LCK_CW
;
LASSERT
(
lli
->
lli_open_fd_write_count
);
lli
->
lli_open_fd_write_count
--
;
}
else
if
(
fd
->
fd_omode
&
FMODE_EXEC
)
{
lockmode
=
LCK_PR
;
LASSERT
(
lli
->
lli_open_fd_exec_count
);
lli
->
lli_open_fd_exec_count
--
;
}
else
{
lockmode
=
LCK_CR
;
LASSERT
(
lli
->
lli_open_fd_read_count
);
lli
->
lli_open_fd_read_count
--
;
}
mutex_unlock
(
&
lli
->
lli_och_mutex
);
if
(
!
md_lock_match
(
md_exp
,
flags
,
ll_inode2fid
(
inode
),
LDLM_IBITS
,
&
policy
,
lockmode
,
&
lockh
))
{
rc
=
ll_md_real_close
(
file
->
f_dentry
->
d_inode
,
fd
->
fd_omode
);
}
mutex_lock
(
&
lli
->
lli_och_mutex
);
if
(
fd
->
fd_omode
&
FMODE_WRITE
)
{
lockmode
=
LCK_CW
;
LASSERT
(
lli
->
lli_open_fd_write_count
);
lli
->
lli_open_fd_write_count
--
;
}
else
if
(
fd
->
fd_omode
&
FMODE_EXEC
)
{
lockmode
=
LCK_PR
;
LASSERT
(
lli
->
lli_open_fd_exec_count
);
lli
->
lli_open_fd_exec_count
--
;
}
else
{
CERROR
(
"Releasing a file %p with negative dentry %p. Name %s"
,
file
,
file
->
f_dentry
,
file
->
f_dentry
->
d_name
.
name
);
lockmode
=
LCK_CR
;
LASSERT
(
lli
->
lli_open_fd_read_count
);
lli
->
lli_open_fd_read_count
--
;
}
mutex_unlock
(
&
lli
->
lli_och_mutex
);
if
(
!
md_lock_match
(
md_exp
,
flags
,
ll_inode2fid
(
inode
),
LDLM_IBITS
,
&
policy
,
lockmode
,
&
lockh
))
rc
=
ll_md_real_close
(
inode
,
fd
->
fd_omode
);
out:
LUSTRE_FPRIVATE
(
file
)
=
NULL
;
...
...
@@ -350,8 +341,7 @@ int ll_file_release(struct inode *inode, struct file *file)
inode
->
i_generation
,
inode
);
#ifdef CONFIG_FS_POSIX_ACL
if
(
sbi
->
ll_flags
&
LL_SBI_RMT_CLIENT
&&
inode
==
inode
->
i_sb
->
s_root
->
d_inode
)
{
if
(
sbi
->
ll_flags
&
LL_SBI_RMT_CLIENT
&&
is_root_inode
(
inode
))
{
struct
ll_file_data
*
fd
=
LUSTRE_FPRIVATE
(
file
);
LASSERT
(
fd
!=
NULL
);
...
...
@@ -363,7 +353,7 @@ int ll_file_release(struct inode *inode, struct file *file)
}
#endif
if
(
inode
->
i_sb
->
s_root
!=
file
->
f_dentry
)
if
(
!
is_root_inode
(
inode
)
)
ll_stats_ops_tally
(
sbi
,
LPROC_LL_RELEASE
,
1
);
fd
=
LUSTRE_FPRIVATE
(
file
);
LASSERT
(
fd
!=
NULL
);
...
...
@@ -375,7 +365,7 @@ int ll_file_release(struct inode *inode, struct file *file)
lli
->
lli_opendir_pid
!=
0
)
ll_stop_statahead
(
inode
,
lli
->
lli_opendir_key
);
if
(
i
node
->
i_sb
->
s_root
==
file
->
f_dentry
)
{
if
(
i
s_root_inode
(
inode
)
)
{
LUSTRE_FPRIVATE
(
file
)
=
NULL
;
ll_file_data_put
(
fd
);
return
0
;
...
...
@@ -394,21 +384,19 @@ int ll_file_release(struct inode *inode, struct file *file)
return
rc
;
}
static
int
ll_intent_file_open
(
struct
file
*
file
,
void
*
lmm
,
static
int
ll_intent_file_open
(
struct
dentry
*
dentry
,
void
*
lmm
,
int
lmmsize
,
struct
lookup_intent
*
itp
)
{
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
file
->
f_dentry
->
d_inode
);
struct
dentry
*
parent
=
file
->
f_dentry
->
d_parent
;
const
char
*
name
=
file
->
f_dentry
->
d_name
.
name
;
const
int
len
=
file
->
f_dentry
->
d_name
.
len
;
struct
inode
*
inode
=
dentry
->
d_inode
;
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
inode
);
struct
dentry
*
parent
=
dentry
->
d_parent
;
const
char
*
name
=
dentry
->
d_name
.
name
;
const
int
len
=
dentry
->
d_name
.
len
;
struct
md_op_data
*
op_data
;
struct
ptlrpc_request
*
req
;
__u32
opc
=
LUSTRE_OPC_ANY
;
int
rc
;
if
(
!
parent
)
return
-
ENOENT
;
/* Usually we come here only for NFSD, and we want open lock.
But we can also get here with pre 2.6.15 patchless kernels, and in
that case that lock is also ok */
...
...
@@ -425,7 +413,7 @@ static int ll_intent_file_open(struct file *file, void *lmm,
}
op_data
=
ll_prep_md_op_data
(
NULL
,
parent
->
d_inode
,
file
->
f_dentry
->
d_
inode
,
name
,
len
,
inode
,
name
,
len
,
O_RDWR
,
opc
,
NULL
);
if
(
IS_ERR
(
op_data
))
return
PTR_ERR
(
op_data
);
...
...
@@ -441,7 +429,7 @@ static int ll_intent_file_open(struct file *file, void *lmm,
if
(
!
it_disposition
(
itp
,
DISP_OPEN_OPEN
)
||
it_open_error
(
DISP_OPEN_OPEN
,
itp
))
goto
out
;
ll_release_openhandle
(
file
->
f_dentry
,
itp
);
ll_release_openhandle
(
inode
,
itp
);
goto
out
;
}
...
...
@@ -456,10 +444,9 @@ static int ll_intent_file_open(struct file *file, void *lmm,
goto
out
;
}
rc
=
ll_prep_inode
(
&
file
->
f_dentry
->
d_
inode
,
req
,
NULL
,
itp
);
rc
=
ll_prep_inode
(
&
inode
,
req
,
NULL
,
itp
);
if
(
!
rc
&&
itp
->
d
.
lustre
.
it_lock_mode
)
ll_set_lock_data
(
sbi
->
ll_md_exp
,
file
->
f_dentry
->
d_inode
,
itp
,
NULL
);
ll_set_lock_data
(
sbi
->
ll_md_exp
,
inode
,
itp
,
NULL
);
out:
ptlrpc_req_finished
(
req
);
...
...
@@ -501,7 +488,7 @@ static int ll_och_fill(struct obd_export *md_exp, struct lookup_intent *it,
static
int
ll_local_open
(
struct
file
*
file
,
struct
lookup_intent
*
it
,
struct
ll_file_data
*
fd
,
struct
obd_client_handle
*
och
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
LASSERT
(
!
LUSTRE_FPRIVATE
(
file
));
...
...
@@ -574,7 +561,7 @@ int ll_file_open(struct inode *inode, struct file *file)
spin_unlock
(
&
lli
->
lli_sa_lock
);
}
if
(
i
node
->
i_sb
->
s_root
==
file
->
f_dentry
)
{
if
(
i
s_root_inode
(
inode
)
)
{
LUSTRE_FPRIVATE
(
file
)
=
fd
;
return
0
;
}
...
...
@@ -632,7 +619,7 @@ int ll_file_open(struct inode *inode, struct file *file)
goto
out_openerr
;
}
ll_release_openhandle
(
file
->
f_dentry
,
it
);
ll_release_openhandle
(
inode
,
it
);
}
(
*
och_usecount
)
++
;
...
...
@@ -652,7 +639,7 @@ int ll_file_open(struct inode *inode, struct file *file)
result in a deadlock */
mutex_unlock
(
&
lli
->
lli_och_mutex
);
it
->
it_create_mode
|=
M_CHECK_STALE
;
rc
=
ll_intent_file_open
(
file
,
NULL
,
0
,
it
);
rc
=
ll_intent_file_open
(
file
->
f_path
.
dentry
,
NULL
,
0
,
it
);
it
->
it_create_mode
&=
~
M_CHECK_STALE
;
if
(
rc
)
goto
out_openerr
;
...
...
@@ -1065,7 +1052,7 @@ int ll_glimpse_ioctl(struct ll_sb_info *sbi, struct lov_stripe_md *lsm,
static
bool
file_is_noatime
(
const
struct
file
*
file
)
{
const
struct
vfsmount
*
mnt
=
file
->
f_path
.
mnt
;
const
struct
inode
*
inode
=
file
->
f_path
.
dentry
->
d_inode
;
const
struct
inode
*
inode
=
file
_inode
(
file
)
;
/* Adapted from file_accessed() and touch_atime().*/
if
(
file
->
f_flags
&
O_NOATIME
)
...
...
@@ -1091,7 +1078,7 @@ static bool file_is_noatime(const struct file *file)
void
ll_io_init
(
struct
cl_io
*
io
,
const
struct
file
*
file
,
int
write
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
io
->
u
.
ci_rw
.
crw_nonblock
=
file
->
f_flags
&
O_NONBLOCK
;
if
(
write
)
{
...
...
@@ -1117,7 +1104,7 @@ ll_file_io_generic(const struct lu_env *env, struct vvp_io_args *args,
struct
file
*
file
,
enum
cl_io_type
iot
,
loff_t
*
ppos
,
size_t
count
)
{
struct
ll_inode_info
*
lli
=
ll_i2info
(
file
->
f_dentry
->
d_inode
);
struct
ll_inode_info
*
lli
=
ll_i2info
(
file
_inode
(
file
)
);
struct
ll_file_data
*
fd
=
LUSTRE_FPRIVATE
(
file
);
struct
cl_io
*
io
;
ssize_t
result
;
...
...
@@ -1178,20 +1165,20 @@ ll_file_io_generic(const struct lu_env *env, struct vvp_io_args *args,
/* If any bit been read/written (result != 0), we just return
* short read/write instead of restart io. */
if
((
result
==
0
||
result
==
-
ENODATA
)
&&
io
->
ci_need_restart
)
{
CDEBUG
(
D_VFSTRACE
,
"Restart %s on %
s
from %lld, count:%zd
\n
"
,
CDEBUG
(
D_VFSTRACE
,
"Restart %s on %
pD
from %lld, count:%zd
\n
"
,
iot
==
CIT_READ
?
"read"
:
"write"
,
file
->
f_dentry
->
d_name
.
name
,
*
ppos
,
count
);
file
,
*
ppos
,
count
);
LASSERTF
(
io
->
ci_nob
==
0
,
"%zd"
,
io
->
ci_nob
);
goto
restart
;
}
if
(
iot
==
CIT_READ
)
{
if
(
result
>=
0
)
ll_stats_ops_tally
(
ll_i2sbi
(
file
->
f_dentry
->
d_inode
),
ll_stats_ops_tally
(
ll_i2sbi
(
file
_inode
(
file
)
),
LPROC_LL_READ_BYTES
,
result
);
}
else
if
(
iot
==
CIT_WRITE
)
{
if
(
result
>=
0
)
{
ll_stats_ops_tally
(
ll_i2sbi
(
file
->
f_dentry
->
d_inode
),
ll_stats_ops_tally
(
ll_i2sbi
(
file
_inode
(
file
)
),
LPROC_LL_WRITE_BYTES
,
result
);
fd
->
fd_write_failed
=
false
;
}
else
if
(
result
!=
-
ERESTARTSYS
)
{
...
...
@@ -1354,7 +1341,7 @@ static int ll_lov_recreate_fid(struct inode *inode, unsigned long arg)
return
ll_lov_recreate
(
inode
,
&
oi
,
ost_idx
);
}
int
ll_lov_setstripe_ea_info
(
struct
inode
*
inode
,
struct
file
*
file
,
int
ll_lov_setstripe_ea_info
(
struct
inode
*
inode
,
struct
dentry
*
dentry
,
int
flags
,
struct
lov_user_md
*
lum
,
int
lum_size
)
{
struct
lov_stripe_md
*
lsm
=
NULL
;
...
...
@@ -1371,21 +1358,20 @@ int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file,
}
ll_inode_size_lock
(
inode
);
rc
=
ll_intent_file_open
(
file
,
lum
,
lum_size
,
&
oit
);
rc
=
ll_intent_file_open
(
dentry
,
lum
,
lum_size
,
&
oit
);
if
(
rc
)
goto
out_unlock
;
rc
=
oit
.
d
.
lustre
.
it_status
;
if
(
rc
<
0
)
goto
out_req_free
;
ll_release_openhandle
(
file
->
f_dentry
,
&
oit
);
ll_release_openhandle
(
inode
,
&
oit
);
out_unlock:
ll_inode_size_unlock
(
inode
);
ll_intent_release
(
&
oit
);
ccc_inode_lsm_put
(
inode
,
lsm
);
out:
cl_lov_delay_create_clear
(
&
file
->
f_flags
);
return
rc
;
out_req_free:
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,
return
-
EFAULT
;
}
rc
=
ll_lov_setstripe_ea_info
(
inode
,
file
,
flags
,
lump
,
lum_size
);
rc
=
ll_lov_setstripe_ea_info
(
inode
,
file
->
f_path
.
dentry
,
flags
,
lump
,
lum_size
);
cl_lov_delay_create_clear
(
&
file
->
f_flags
);
OBD_FREE_LARGE
(
lump
,
lum_size
);
return
rc
;
...
...
@@ -1526,7 +1514,9 @@ static int ll_lov_setstripe(struct inode *inode, struct file *file,
return
-
EFAULT
;
}
rc
=
ll_lov_setstripe_ea_info
(
inode
,
file
,
flags
,
lumv1
,
lum_size
);
rc
=
ll_lov_setstripe_ea_info
(
inode
,
file
->
f_path
.
dentry
,
flags
,
lumv1
,
lum_size
);
cl_lov_delay_create_clear
(
&
file
->
f_flags
);
if
(
rc
==
0
)
{
struct
lov_stripe_md
*
lsm
;
__u32
gen
;
...
...
@@ -1631,22 +1621,21 @@ int ll_put_grouplock(struct inode *inode, struct file *file, unsigned long arg)
/**
* Close inode open handle
*
* \param
dentry [in] dentry which contains the inode
* \param
inode [in] inode in question
* \param it [in,out] intent which contains open info and result
*
* \retval 0 success
* \retval <0 failure
*/
int
ll_release_openhandle
(
struct
dentry
*
dentry
,
struct
lookup_intent
*
it
)
int
ll_release_openhandle
(
struct
inode
*
inode
,
struct
lookup_intent
*
it
)
{
struct
inode
*
inode
=
dentry
->
d_inode
;
struct
obd_client_handle
*
och
;
int
rc
;
LASSERT
(
inode
);
/* Root ? Do nothing. */
if
(
dentry
->
d_inode
->
i_sb
->
s_root
==
dentry
)
if
(
is_root_inode
(
inode
)
)
return
0
;
/* No open handle to close? Move away */
...
...
@@ -1959,8 +1948,8 @@ static int ll_swap_layouts(struct file *file1, struct file *file2,
if
(
!
llss
)
return
-
ENOMEM
;
llss
->
inode1
=
file
1
->
f_dentry
->
d_inode
;
llss
->
inode2
=
file
2
->
f_dentry
->
d_inode
;
llss
->
inode1
=
file
_inode
(
file1
)
;
llss
->
inode2
=
file
_inode
(
file2
)
;
if
(
!
S_ISREG
(
llss
->
inode2
->
i_mode
))
{
rc
=
-
EINVAL
;
...
...
@@ -2204,7 +2193,7 @@ static int ll_hsm_import(struct inode *inode, struct file *file,
static
long
ll_file_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
struct
ll_file_data
*
fd
=
LUSTRE_FPRIVATE
(
file
);
int
flags
,
rc
;
...
...
@@ -2523,7 +2512,7 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
static
loff_t
ll_file_seek
(
struct
file
*
file
,
loff_t
offset
,
int
origin
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
loff_t
retval
,
eof
=
0
;
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)
static
int
ll_flush
(
struct
file
*
file
,
fl_owner_t
id
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
struct
ll_file_data
*
fd
=
LUSTRE_FPRIVATE
(
file
);
int
rc
,
err
;
...
...
@@ -2624,8 +2613,7 @@ int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end,
int
ll_fsync
(
struct
file
*
file
,
loff_t
start
,
loff_t
end
,
int
datasync
)
{
struct
dentry
*
dentry
=
file
->
f_dentry
;
struct
inode
*
inode
=
dentry
->
d_inode
;
struct
inode
*
inode
=
file_inode
(
file
);
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
struct
ptlrpc_request
*
req
;
struct
obd_capa
*
oc
;
...
...
@@ -2678,7 +2666,7 @@ int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync)
static
int
ll_file_flock
(
struct
file
*
file
,
int
cmd
,
struct
file_lock
*
file_lock
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
inode
);
struct
ldlm_enqueue_info
einfo
=
{
.
ei_type
=
LDLM_FLOCK
,
...
...
@@ -2902,8 +2890,8 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
LASSERT
(
inode
!=
NULL
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:inode=%lu/%u(%p),name=%
s
\n
"
,
inode
->
i_ino
,
inode
->
i_generation
,
inode
,
dentry
->
d_name
.
name
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:inode=%lu/%u(%p),name=%
pd
\n
"
,
inode
->
i_ino
,
inode
->
i_generation
,
inode
,
dentry
);
exp
=
ll_i2mdexp
(
inode
);
...
...
@@ -3113,7 +3101,7 @@ int ll_inode_permission(struct inode *inode, int mask)
/* as root inode are NOT getting validated in lookup operation,
* need to do it before permission check. */
if
(
i
node
==
inode
->
i_sb
->
s_root
->
d_inode
)
{
if
(
i
s_root_inode
(
inode
)
)
{
rc
=
__ll_inode_revalidate
(
inode
->
i_sb
->
s_root
,
MDS_INODELOCK_LOOKUP
);
if
(
rc
)
...
...
drivers/staging/lustre/lustre/llite/llite_internal.h
浏览文件 @
e63fa0d4
...
...
@@ -748,7 +748,7 @@ int ll_file_release(struct inode *inode, struct file *file);
int
ll_glimpse_ioctl
(
struct
ll_sb_info
*
sbi
,
struct
lov_stripe_md
*
lsm
,
lstat_t
*
st
);
void
ll_ioepoch_open
(
struct
ll_inode_info
*
lli
,
__u64
ioepoch
);
int
ll_release_openhandle
(
struct
dentry
*
,
struct
lookup_intent
*
);
int
ll_release_openhandle
(
struct
inode
*
,
struct
lookup_intent
*
);
int
ll_md_real_close
(
struct
inode
*
inode
,
fmode_t
fmode
);
void
ll_ioepoch_close
(
struct
inode
*
inode
,
struct
md_op_data
*
op_data
,
struct
obd_client_handle
**
och
,
unsigned
long
flags
);
...
...
@@ -763,7 +763,7 @@ struct posix_acl *ll_get_acl(struct inode *inode, int type);
int
ll_inode_permission
(
struct
inode
*
inode
,
int
mask
);
int
ll_lov_setstripe_ea_info
(
struct
inode
*
inode
,
struct
file
*
file
,
int
ll_lov_setstripe_ea_info
(
struct
inode
*
inode
,
struct
dentry
*
dentry
,
int
flags
,
struct
lov_user_md
*
lum
,
int
lum_size
);
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,
static
inline
int
ll_file_nolock
(
const
struct
file
*
file
)
{
struct
ll_file_data
*
fd
=
LUSTRE_FPRIVATE
(
file
);
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
LASSERT
(
fd
!=
NULL
);
return
((
fd
->
fd_flags
&
LL_FILE_IGNORE_LOCK
)
||
...
...
@@ -1489,8 +1489,8 @@ static inline void __d_lustre_invalidate(struct dentry *dentry)
*/
static
inline
void
d_lustre_invalidate
(
struct
dentry
*
dentry
,
int
nested
)
{
CDEBUG
(
D_DENTRY
,
"invalidate dentry %
.*s
(%p) parent %p inode %p "
"refc %d
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
dentry
,
CDEBUG
(
D_DENTRY
,
"invalidate dentry %
pd
(%p) parent %p inode %p "
"refc %d
\n
"
,
dentry
,
dentry
,
dentry
->
d_parent
,
dentry
->
d_inode
,
d_count
(
dentry
));
spin_lock_nested
(
&
dentry
->
d_lock
,
...
...
drivers/staging/lustre/lustre/llite/llite_lib.c
浏览文件 @
e63fa0d4
...
...
@@ -698,10 +698,8 @@ void lustre_dump_dentry(struct dentry *dentry, int recur)
list_for_each
(
tmp
,
&
dentry
->
d_subdirs
)
subdirs
++
;
CERROR
(
"dentry %p dump: name=%.*s parent=%.*s (%p), inode=%p, count=%u,"
" flags=0x%x, fsdata=%p, %d subdirs
\n
"
,
dentry
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
dentry
->
d_parent
->
d_name
.
len
,
dentry
->
d_parent
->
d_name
.
name
,
CERROR
(
"dentry %p dump: name=%pd parent=%p, inode=%p, count=%u,"
" flags=0x%x, fsdata=%p, %d subdirs
\n
"
,
dentry
,
dentry
,
dentry
->
d_parent
,
dentry
->
d_inode
,
d_count
(
dentry
),
dentry
->
d_flags
,
dentry
->
d_fsdata
,
subdirs
);
if
(
dentry
->
d_inode
!=
NULL
)
...
...
drivers/staging/lustre/lustre/llite/llite_mmap.c
浏览文件 @
e63fa0d4
...
...
@@ -100,7 +100,7 @@ ll_fault_io_init(struct vm_area_struct *vma, struct lu_env **env_ret,
unsigned
long
*
ra_flags
)
{
struct
file
*
file
=
vma
->
vm_file
;
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
struct
cl_io
*
io
;
struct
cl_fault_io
*
fio
;
struct
lu_env
*
env
;
...
...
@@ -213,7 +213,7 @@ static int ll_page_mkwrite0(struct vm_area_struct *vma, struct page *vmpage,
cfs_restore_sigs
(
set
);
if
(
result
==
0
)
{
struct
inode
*
inode
=
vma
->
vm_file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file_inode
(
vma
->
vm_file
)
;
struct
ll_inode_info
*
lli
=
ll_i2info
(
inode
);
lock_page
(
vmpage
);
...
...
@@ -396,7 +396,7 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
CWARN
(
"app(%s): the page %lu of file %lu is under heavy"
" contention.
\n
"
,
current
->
comm
,
vmf
->
pgoff
,
vma
->
vm_file
->
f_dentry
->
d_inode
->
i_ino
);
file_inode
(
vma
->
vm_file
)
->
i_ino
);
printed
=
true
;
}
}
while
(
retry
);
...
...
@@ -430,7 +430,7 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
*/
static
void
ll_vm_open
(
struct
vm_area_struct
*
vma
)
{
struct
inode
*
inode
=
vma
->
vm_file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file_inode
(
vma
->
vm_file
)
;
struct
ccc_object
*
vob
=
cl_inode2ccc
(
inode
);
LASSERT
(
vma
->
vm_file
);
...
...
@@ -443,7 +443,7 @@ static void ll_vm_open(struct vm_area_struct *vma)
*/
static
void
ll_vm_close
(
struct
vm_area_struct
*
vma
)
{
struct
inode
*
inode
=
vma
->
vm_file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file_inode
(
vma
->
vm_file
)
;
struct
ccc_object
*
vob
=
cl_inode2ccc
(
inode
);
LASSERT
(
vma
->
vm_file
);
...
...
@@ -476,7 +476,7 @@ static const struct vm_operations_struct ll_file_vm_ops = {
int
ll_file_mmap
(
struct
file
*
file
,
struct
vm_area_struct
*
vma
)
{
struct
inode
*
inode
=
file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file
_inode
(
file
)
;
int
rc
;
if
(
ll_file_nolock
(
file
))
...
...
drivers/staging/lustre/lustre/llite/lloop.c
浏览文件 @
e63fa0d4
...
...
@@ -187,7 +187,7 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
{
const
struct
lu_env
*
env
=
lo
->
lo_env
;
struct
cl_io
*
io
=
&
lo
->
lo_io
;
struct
inode
*
inode
=
lo
->
lo_backing_file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file_inode
(
lo
->
lo_backing_file
)
;
struct
cl_object
*
obj
=
ll_i2info
(
inode
)
->
lli_clob
;
pgoff_t
offset
;
int
ret
;
...
...
@@ -626,7 +626,7 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
break
;
}
if
(
inode
==
NULL
)
inode
=
lo
->
lo_backing_file
->
f_dentry
->
d_inode
;
inode
=
file_inode
(
lo
->
lo_backing_file
)
;
if
(
lo
->
lo_state
==
LLOOP_BOUND
)
fid
=
ll_i2info
(
inode
)
->
lli_fid
;
else
...
...
@@ -692,8 +692,7 @@ static enum llioc_iter lloop_ioctl(struct inode *unused, struct file *file,
lo_free
=
lo
;
continue
;
}
if
(
lo
->
lo_backing_file
->
f_dentry
->
d_inode
==
file
->
f_dentry
->
d_inode
)
if
(
file_inode
(
lo
->
lo_backing_file
)
==
file_inode
(
file
))
break
;
}
if
(
lo
||
!
lo_free
)
{
...
...
drivers/staging/lustre/lustre/llite/namei.c
浏览文件 @
e63fa0d4
...
...
@@ -54,27 +54,6 @@
static
int
ll_create_it
(
struct
inode
*
,
struct
dentry
*
,
int
,
struct
lookup_intent
*
);
/*
* Check if we have something mounted at the named dchild.
* In such a case there would always be dentry present.
*/
static
int
ll_d_mountpoint
(
struct
dentry
*
dparent
,
struct
dentry
*
dchild
,
struct
qstr
*
name
)
{
int
mounted
=
0
;
if
(
unlikely
(
dchild
))
{
mounted
=
d_mountpoint
(
dchild
);
}
else
if
(
dparent
)
{
dchild
=
d_lookup
(
dparent
,
name
);
if
(
dchild
)
{
mounted
=
d_mountpoint
(
dchild
);
dput
(
dchild
);
}
}
return
mounted
;
}
/* called from iget5_locked->find_inode() under inode_hash_lock spinlock */
static
int
ll_test_inode
(
struct
inode
*
inode
,
void
*
opaque
)
{
...
...
@@ -285,7 +264,7 @@ int ll_md_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
if
((
bits
&
(
MDS_INODELOCK_LOOKUP
|
MDS_INODELOCK_PERM
))
&&
inode
->
i_sb
->
s_root
!=
NULL
&&
i
node
!=
inode
->
i_sb
->
s_root
->
d_inode
)
i
s_root_inode
(
inode
)
)
ll_invalidate_aliases
(
inode
);
iput
(
inode
);
...
...
@@ -509,8 +488,8 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
if
(
dentry
->
d_name
.
len
>
ll_i2sbi
(
parent
)
->
ll_namelen
)
return
ERR_PTR
(
-
ENAMETOOLONG
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
.*s
,dir=%lu/%u(%p),intent=%s
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
parent
->
i_ino
,
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
,dir=%lu/%u(%p),intent=%s
\n
"
,
dentry
,
parent
->
i_ino
,
parent
->
i_generation
,
parent
,
LL_IT2STR
(
it
));
if
(
d_mountpoint
(
dentry
))
...
...
@@ -563,7 +542,7 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
if
((
it
->
it_op
&
IT_OPEN
)
&&
dentry
->
d_inode
&&
!
S_ISREG
(
dentry
->
d_inode
->
i_mode
)
&&
!
S_ISDIR
(
dentry
->
d_inode
->
i_mode
))
{
ll_release_openhandle
(
dentry
,
it
);
ll_release_openhandle
(
dentry
->
d_inode
,
it
);
}
ll_lookup_finish_locks
(
it
,
dentry
);
...
...
@@ -586,8 +565,8 @@ static struct dentry *ll_lookup_nd(struct inode *parent, struct dentry *dentry,
struct
lookup_intent
*
itp
,
it
=
{
.
it_op
=
IT_GETATTR
};
struct
dentry
*
de
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
.*s
,dir=%lu/%u(%p),flags=%u
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
parent
->
i_ino
,
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
,dir=%lu/%u(%p),flags=%u
\n
"
,
dentry
,
parent
->
i_ino
,
parent
->
i_generation
,
parent
,
flags
);
/* Optimize away (CREATE && !OPEN). Let .create handle the race. */
...
...
@@ -619,9 +598,9 @@ static int ll_atomic_open(struct inode *dir, struct dentry *dentry,
long
long
lookup_flags
=
LOOKUP_OPEN
;
int
rc
=
0
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
.*s
,dir=%lu/%u(%p),file %p,"
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
,dir=%lu/%u(%p),file %p,"
"open_flags %x,mode %x opened %d
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
dir
->
i_ino
,
dentry
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
file
,
open_flags
,
mode
,
*
opened
);
it
=
kzalloc
(
sizeof
(
*
it
),
GFP_NOFS
);
...
...
@@ -741,8 +720,8 @@ static int ll_create_it(struct inode *dir, struct dentry *dentry, int mode,
struct
inode
*
inode
;
int
rc
=
0
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
.*s
,dir=%lu/%u(%p),intent=%s
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
dir
->
i_ino
,
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
,dir=%lu/%u(%p),intent=%s
\n
"
,
dentry
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
LL_IT2STR
(
it
));
rc
=
it_open_error
(
DISP_OPEN_CREATE
,
it
);
...
...
@@ -775,9 +754,9 @@ static void ll_update_times(struct ptlrpc_request *request,
LTIME_S
(
inode
->
i_ctime
)
=
body
->
ctime
;
}
static
int
ll_new_node
(
struct
inode
*
dir
,
struct
qstr
*
name
,
static
int
ll_new_node
(
struct
inode
*
dir
,
struct
dentry
*
dentry
,
const
char
*
tgt
,
int
mode
,
int
rdev
,
struct
dentry
*
dchild
,
__u32
opc
)
__u32
opc
)
{
struct
ptlrpc_request
*
request
=
NULL
;
struct
md_op_data
*
op_data
;
...
...
@@ -789,8 +768,10 @@ static int ll_new_node(struct inode *dir, struct qstr *name,
if
(
unlikely
(
tgt
!=
NULL
))
tgt_len
=
strlen
(
tgt
)
+
1
;
op_data
=
ll_prep_md_op_data
(
NULL
,
dir
,
NULL
,
name
->
name
,
name
->
len
,
0
,
opc
,
NULL
);
op_data
=
ll_prep_md_op_data
(
NULL
,
dir
,
NULL
,
dentry
->
d_name
.
name
,
dentry
->
d_name
.
len
,
0
,
opc
,
NULL
);
if
(
IS_ERR
(
op_data
))
{
err
=
PTR_ERR
(
op_data
);
goto
err_exit
;
...
...
@@ -806,27 +787,25 @@ static int ll_new_node(struct inode *dir, struct qstr *name,
ll_update_times
(
request
,
dir
);
if
(
dchild
)
{
err
=
ll_prep_inode
(
&
inode
,
request
,
dchild
->
d_sb
,
NULL
);
if
(
err
)
goto
err_exit
;
err
=
ll_prep_inode
(
&
inode
,
request
,
dir
->
i_sb
,
NULL
);
if
(
err
)
goto
err_exit
;
d_instantiate
(
dchild
,
inode
);
}
d_instantiate
(
dentry
,
inode
);
err_exit:
ptlrpc_req_finished
(
request
);
return
err
;
}
static
int
ll_mknod
_generic
(
struct
inode
*
dir
,
struct
qstr
*
name
,
int
mode
,
unsigned
rdev
,
struct
dentry
*
dchild
)
static
int
ll_mknod
(
struct
inode
*
dir
,
struct
dentry
*
dchild
,
umode_t
mode
,
dev_t
rdev
)
{
int
err
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
.*s
,dir=%lu/%u(%p) mode %o dev %x
\n
"
,
name
->
len
,
name
->
name
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
mode
,
rdev
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
,dir=%lu/%u(%p) mode %o dev %x
\n
"
,
dchild
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
mode
,
old_encode_dev
(
rdev
)
);
if
(
!
IS_POSIXACL
(
dir
)
||
!
exp_connect_umask
(
ll_i2mdexp
(
dir
)))
mode
&=
~
current_umask
();
...
...
@@ -839,7 +818,8 @@ static int ll_mknod_generic(struct inode *dir, struct qstr *name, int mode,
case
S_IFBLK
:
case
S_IFIFO
:
case
S_IFSOCK
:
err
=
ll_new_node
(
dir
,
name
,
NULL
,
mode
,
rdev
,
dchild
,
err
=
ll_new_node
(
dir
,
dchild
,
NULL
,
mode
,
old_encode_dev
(
rdev
),
LUSTRE_OPC_MKNOD
);
break
;
case
S_IFDIR
:
...
...
@@ -863,134 +843,25 @@ static int ll_create_nd(struct inode *dir, struct dentry *dentry,
{
int
rc
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
.*s
,dir=%lu/%u(%p),"
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
,dir=%lu/%u(%p),"
"flags=%u, excl=%d
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
dir
->
i_ino
,
dentry
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
mode
,
want_excl
);
rc
=
ll_mknod
_generic
(
dir
,
&
dentry
->
d_name
,
mode
,
0
,
dentry
);
rc
=
ll_mknod
(
dir
,
dentry
,
mode
,
0
);
ll_stats_ops_tally
(
ll_i2sbi
(
dir
),
LPROC_LL_CREATE
,
1
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
.*s
, unhashed %d
\n
"
,
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
,
d_unhashed
(
dentry
));
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%
pd
, unhashed %d
\n
"
,
dentry
,
d_unhashed
(
dentry
));
return
rc
;
}
static
int
ll_symlink_generic
(
struct
inode
*
dir
,
struct
qstr
*
name
,
const
char
*
tgt
,
struct
dentry
*
dchild
)
static
inline
void
ll_get_child_fid
(
struct
dentry
*
child
,
struct
lu_fid
*
fid
)
{
int
err
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%.*s,dir=%lu/%u(%p),target=%.*s
\n
"
,
name
->
len
,
name
->
name
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
3000
,
tgt
);
err
=
ll_new_node
(
dir
,
name
,
(
char
*
)
tgt
,
S_IFLNK
|
S_IRWXUGO
,
0
,
dchild
,
LUSTRE_OPC_SYMLINK
);
if
(
!
err
)
ll_stats_ops_tally
(
ll_i2sbi
(
dir
),
LPROC_LL_SYMLINK
,
1
);
return
err
;
}
static
int
ll_link_generic
(
struct
inode
*
src
,
struct
inode
*
dir
,
struct
qstr
*
name
,
struct
dentry
*
dchild
)
{
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
dir
);
struct
ptlrpc_request
*
request
=
NULL
;
struct
md_op_data
*
op_data
;
int
err
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op: inode=%lu/%u(%p), dir=%lu/%u(%p), target=%.*s
\n
"
,
src
->
i_ino
,
src
->
i_generation
,
src
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
name
->
len
,
name
->
name
);
op_data
=
ll_prep_md_op_data
(
NULL
,
src
,
dir
,
name
->
name
,
name
->
len
,
0
,
LUSTRE_OPC_ANY
,
NULL
);
if
(
IS_ERR
(
op_data
))
return
PTR_ERR
(
op_data
);
err
=
md_link
(
sbi
->
ll_md_exp
,
op_data
,
&
request
);
ll_finish_md_op_data
(
op_data
);
if
(
err
)
goto
out
;
ll_update_times
(
request
,
dir
);
ll_stats_ops_tally
(
sbi
,
LPROC_LL_LINK
,
1
);
out:
ptlrpc_req_finished
(
request
);
return
err
;
}
static
int
ll_mkdir_generic
(
struct
inode
*
dir
,
struct
qstr
*
name
,
int
mode
,
struct
dentry
*
dchild
)
{
int
err
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%.*s,dir=%lu/%u(%p)
\n
"
,
name
->
len
,
name
->
name
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
);
if
(
!
IS_POSIXACL
(
dir
)
||
!
exp_connect_umask
(
ll_i2mdexp
(
dir
)))
mode
&=
~
current_umask
();
mode
=
(
mode
&
(
S_IRWXUGO
|
S_ISVTX
))
|
S_IFDIR
;
err
=
ll_new_node
(
dir
,
name
,
NULL
,
mode
,
0
,
dchild
,
LUSTRE_OPC_MKDIR
);
if
(
!
err
)
ll_stats_ops_tally
(
ll_i2sbi
(
dir
),
LPROC_LL_MKDIR
,
1
);
return
err
;
}
/* Try to find the child dentry by its name.
If found, put the result fid into @fid. */
static
void
ll_get_child_fid
(
struct
inode
*
dir
,
struct
qstr
*
name
,
struct
lu_fid
*
fid
)
{
struct
dentry
*
parent
,
*
child
;
parent
=
ll_d_hlist_entry
(
dir
->
i_dentry
,
struct
dentry
,
d_u
.
d_alias
);
child
=
d_lookup
(
parent
,
name
);
if
(
child
)
{
if
(
child
->
d_inode
)
*
fid
=
*
ll_inode2fid
(
child
->
d_inode
);
dput
(
child
);
}
}
static
int
ll_rmdir_generic
(
struct
inode
*
dir
,
struct
dentry
*
dparent
,
struct
dentry
*
dchild
,
struct
qstr
*
name
)
{
struct
ptlrpc_request
*
request
=
NULL
;
struct
md_op_data
*
op_data
;
int
rc
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%.*s,dir=%lu/%u(%p)
\n
"
,
name
->
len
,
name
->
name
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
);
if
(
unlikely
(
ll_d_mountpoint
(
dparent
,
dchild
,
name
)))
return
-
EBUSY
;
op_data
=
ll_prep_md_op_data
(
NULL
,
dir
,
NULL
,
name
->
name
,
name
->
len
,
S_IFDIR
,
LUSTRE_OPC_ANY
,
NULL
);
if
(
IS_ERR
(
op_data
))
return
PTR_ERR
(
op_data
);
ll_get_child_fid
(
dir
,
name
,
&
op_data
->
op_fid3
);
op_data
->
op_fid2
=
op_data
->
op_fid3
;
rc
=
md_unlink
(
ll_i2sbi
(
dir
)
->
ll_md_exp
,
op_data
,
&
request
);
ll_finish_md_op_data
(
op_data
);
if
(
rc
==
0
)
{
ll_update_times
(
request
,
dir
);
ll_stats_ops_tally
(
ll_i2sbi
(
dir
),
LPROC_LL_RMDIR
,
1
);
}
ptlrpc_req_finished
(
request
);
return
rc
;
if
(
child
->
d_inode
)
*
fid
=
*
ll_inode2fid
(
child
->
d_inode
);
}
/**
...
...
@@ -1099,32 +970,26 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir)
return
rc
;
}
/* ll_unlink
_generic
() doesn't update the inode with the new link count.
/* ll_unlink() doesn't update the inode with the new link count.
* Instead, ll_ddelete() and ll_d_iput() will update it based upon if there
* is any lock existing. They will recycle dentries and inodes based upon locks
* too. b=20433 */
static
int
ll_unlink_generic
(
struct
inode
*
dir
,
struct
dentry
*
dparent
,
struct
dentry
*
dchild
,
struct
qstr
*
name
)
static
int
ll_unlink
(
struct
inode
*
dir
,
struct
dentry
*
dentry
)
{
struct
ptlrpc_request
*
request
=
NULL
;
struct
md_op_data
*
op_data
;
int
rc
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%.*s,dir=%lu/%u(%p)
\n
"
,
name
->
len
,
name
->
name
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
);
/*
* XXX: unlink bind mountpoint maybe call to here,
* just check it as vfs_unlink does.
*/
if
(
unlikely
(
ll_d_mountpoint
(
dparent
,
dchild
,
name
)))
return
-
EBUSY
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%pd,dir=%lu/%u(%p)
\n
"
,
dentry
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
);
op_data
=
ll_prep_md_op_data
(
NULL
,
dir
,
NULL
,
name
->
name
,
name
->
len
,
0
,
LUSTRE_OPC_ANY
,
NULL
);
op_data
=
ll_prep_md_op_data
(
NULL
,
dir
,
NULL
,
dentry
->
d_name
.
name
,
dentry
->
d_name
.
len
,
0
,
LUSTRE_OPC_ANY
,
NULL
);
if
(
IS_ERR
(
op_data
))
return
PTR_ERR
(
op_data
);
ll_get_child_fid
(
d
ir
,
name
,
&
op_data
->
op_fid3
);
ll_get_child_fid
(
d
entry
,
&
op_data
->
op_fid3
);
op_data
->
op_fid2
=
op_data
->
op_fid3
;
rc
=
md_unlink
(
ll_i2sbi
(
dir
)
->
ll_md_exp
,
op_data
,
&
request
);
ll_finish_md_op_data
(
op_data
);
...
...
@@ -1140,95 +1005,140 @@ static int ll_unlink_generic(struct inode *dir, struct dentry *dparent,
return
rc
;
}
static
int
ll_rename_generic
(
struct
inode
*
src
,
struct
dentry
*
src_dparent
,
struct
dentry
*
src_dchild
,
struct
qstr
*
src_name
,
struct
inode
*
tgt
,
struct
dentry
*
tgt_dparent
,
struct
dentry
*
tgt_dchild
,
struct
qstr
*
tgt_name
)
static
int
ll_mkdir
(
struct
inode
*
dir
,
struct
dentry
*
dentry
,
ll_umode_t
mode
)
{
struct
ptlrpc_request
*
request
=
NULL
;
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
src
);
struct
md_op_data
*
op_data
;
int
err
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:oldname=%.*s,src_dir=%lu/%u(%p),newname=%.*s,"
"tgt_dir=%lu/%u(%p)
\n
"
,
src_name
->
len
,
src_name
->
name
,
src
->
i_ino
,
src
->
i_generation
,
src
,
tgt_name
->
len
,
tgt_name
->
name
,
tgt
->
i_ino
,
tgt
->
i_generation
,
tgt
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%pd,dir=%lu/%u(%p)
\n
"
,
dentry
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
);
if
(
unlikely
(
ll_d_mountpoint
(
src_dparent
,
src_dchild
,
src_name
)
||
ll_d_mountpoint
(
tgt_dparent
,
tgt_dchild
,
tgt_name
)))
return
-
EBUSY
;
if
(
!
IS_POSIXACL
(
dir
)
||
!
exp_connect_umask
(
ll_i2mdexp
(
dir
)))
mode
&=
~
current_umask
();
mode
=
(
mode
&
(
S_IRWXUGO
|
S_ISVTX
))
|
S_IFDIR
;
err
=
ll_new_node
(
dir
,
dentry
,
NULL
,
mode
,
0
,
LUSTRE_OPC_MKDIR
);
op_data
=
ll_prep_md_op_data
(
NULL
,
src
,
tgt
,
NULL
,
0
,
0
,
LUSTRE_OPC_ANY
,
NULL
);
if
(
!
err
)
ll_stats_ops_tally
(
ll_i2sbi
(
dir
),
LPROC_LL_MKDIR
,
1
);
return
err
;
}
static
int
ll_rmdir
(
struct
inode
*
dir
,
struct
dentry
*
dentry
)
{
struct
ptlrpc_request
*
request
=
NULL
;
struct
md_op_data
*
op_data
;
int
rc
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%pd,dir=%lu/%u(%p)
\n
"
,
dentry
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
);
op_data
=
ll_prep_md_op_data
(
NULL
,
dir
,
NULL
,
dentry
->
d_name
.
name
,
dentry
->
d_name
.
len
,
S_IFDIR
,
LUSTRE_OPC_ANY
,
NULL
);
if
(
IS_ERR
(
op_data
))
return
PTR_ERR
(
op_data
);
ll_get_child_fid
(
src
,
src_name
,
&
op_data
->
op_fid3
);
ll_get_child_fid
(
tgt
,
tgt_name
,
&
op_data
->
op_fid4
);
err
=
md_rename
(
sbi
->
ll_md_exp
,
op_data
,
src_name
->
name
,
src_name
->
len
,
tgt_name
->
name
,
tgt_name
->
len
,
&
request
);
ll_get_child_fid
(
dentry
,
&
op_data
->
op_fid3
);
op_data
->
op_fid2
=
op_data
->
op_fid3
;
rc
=
md_unlink
(
ll_i2sbi
(
dir
)
->
ll_md_exp
,
op_data
,
&
request
);
ll_finish_md_op_data
(
op_data
);
if
(
!
err
)
{
ll_update_times
(
request
,
src
);
ll_update_times
(
request
,
tgt
);
ll_stats_ops_tally
(
sbi
,
LPROC_LL_RENAME
,
1
);
err
=
ll_objects_destroy
(
request
,
src
);
if
(
rc
==
0
)
{
ll_update_times
(
request
,
dir
);
ll_stats_ops_tally
(
ll_i2sbi
(
dir
),
LPROC_LL_RMDIR
,
1
);
}
ptlrpc_req_finished
(
request
);
return
err
;
return
rc
;
}
static
int
ll_
mknod
(
struct
inode
*
dir
,
struct
dentry
*
dchild
,
ll_umode_t
mode
,
dev_t
rdev
)
static
int
ll_
symlink
(
struct
inode
*
dir
,
struct
dentry
*
dentry
,
const
char
*
oldname
)
{
return
ll_mknod_generic
(
dir
,
&
dchild
->
d_name
,
mode
,
old_encode_dev
(
rdev
),
dchild
);
}
int
err
;
static
int
ll_unlink
(
struct
inode
*
dir
,
struct
dentry
*
dentry
)
{
return
ll_unlink_generic
(
dir
,
NULL
,
dentry
,
&
dentry
->
d_name
);
}
CDEBUG
(
D_VFSTRACE
,
"VFS Op:name=%pd,dir=%lu/%u(%p),target=%.*s
\n
"
,
dentry
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
3000
,
oldname
);
static
int
ll_mkdir
(
struct
inode
*
dir
,
struct
dentry
*
dentry
,
ll_umode_t
mode
)
{
return
ll_mkdir_generic
(
dir
,
&
dentry
->
d_name
,
mode
,
dentry
);
}
err
=
ll_new_node
(
dir
,
dentry
,
oldname
,
S_IFLNK
|
S_IRWXUGO
,
0
,
LUSTRE_OPC_SYMLINK
);
static
int
ll_rmdir
(
struct
inode
*
dir
,
struct
dentry
*
dentry
)
{
return
ll_rmdir_generic
(
dir
,
NULL
,
dentry
,
&
dentry
->
d_name
);
}
if
(
!
err
)
ll_stats_ops_tally
(
ll_i2sbi
(
dir
),
LPROC_LL_SYMLINK
,
1
);
static
int
ll_symlink
(
struct
inode
*
dir
,
struct
dentry
*
dentry
,
const
char
*
oldname
)
{
return
ll_symlink_generic
(
dir
,
&
dentry
->
d_name
,
oldname
,
dentry
);
return
err
;
}
static
int
ll_link
(
struct
dentry
*
old_dentry
,
struct
inode
*
dir
,
struct
dentry
*
new_dentry
)
{
return
ll_link_generic
(
old_dentry
->
d_inode
,
dir
,
&
new_dentry
->
d_name
,
new_dentry
);
struct
inode
*
src
=
old_dentry
->
d_inode
;
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
dir
);
struct
ptlrpc_request
*
request
=
NULL
;
struct
md_op_data
*
op_data
;
int
err
;
CDEBUG
(
D_VFSTRACE
,
"VFS Op: inode=%lu/%u(%p), dir=%lu/%u(%p), target=%pd
\n
"
,
src
->
i_ino
,
src
->
i_generation
,
src
,
dir
->
i_ino
,
dir
->
i_generation
,
dir
,
new_dentry
);
op_data
=
ll_prep_md_op_data
(
NULL
,
src
,
dir
,
new_dentry
->
d_name
.
name
,
new_dentry
->
d_name
.
len
,
0
,
LUSTRE_OPC_ANY
,
NULL
);
if
(
IS_ERR
(
op_data
))
return
PTR_ERR
(
op_data
);
err
=
md_link
(
sbi
->
ll_md_exp
,
op_data
,
&
request
);
ll_finish_md_op_data
(
op_data
);
if
(
err
)
goto
out
;
ll_update_times
(
request
,
dir
);
ll_stats_ops_tally
(
sbi
,
LPROC_LL_LINK
,
1
);
out:
ptlrpc_req_finished
(
request
);
return
err
;
}
static
int
ll_rename
(
struct
inode
*
old_dir
,
struct
dentry
*
old_dentry
,
struct
inode
*
new_dir
,
struct
dentry
*
new_dentry
)
{
struct
ptlrpc_request
*
request
=
NULL
;
struct
ll_sb_info
*
sbi
=
ll_i2sbi
(
old_dir
);
struct
md_op_data
*
op_data
;
int
err
;
err
=
ll_rename_generic
(
old_dir
,
NULL
,
old_dentry
,
&
old_dentry
->
d_name
,
new_dir
,
NULL
,
new_dentry
,
&
new_dentry
->
d_name
);
CDEBUG
(
D_VFSTRACE
,
"VFS Op:oldname=%pd,src_dir=%lu/%u(%p),newname=%pd,"
"tgt_dir=%lu/%u(%p)
\n
"
,
old_dentry
,
old_dir
->
i_ino
,
old_dir
->
i_generation
,
old_dir
,
new_dentry
,
new_dir
->
i_ino
,
new_dir
->
i_generation
,
new_dir
);
op_data
=
ll_prep_md_op_data
(
NULL
,
old_dir
,
new_dir
,
NULL
,
0
,
0
,
LUSTRE_OPC_ANY
,
NULL
);
if
(
IS_ERR
(
op_data
))
return
PTR_ERR
(
op_data
);
ll_get_child_fid
(
old_dentry
,
&
op_data
->
op_fid3
);
ll_get_child_fid
(
new_dentry
,
&
op_data
->
op_fid4
);
err
=
md_rename
(
sbi
->
ll_md_exp
,
op_data
,
old_dentry
->
d_name
.
name
,
old_dentry
->
d_name
.
len
,
new_dentry
->
d_name
.
name
,
new_dentry
->
d_name
.
len
,
&
request
);
ll_finish_md_op_data
(
op_data
);
if
(
!
err
)
{
d_move
(
old_dentry
,
new_dentry
);
ll_update_times
(
request
,
old_dir
);
ll_update_times
(
request
,
new_dir
);
ll_stats_ops_tally
(
sbi
,
LPROC_LL_RENAME
,
1
);
err
=
ll_objects_destroy
(
request
,
old_dir
);
}
ptlrpc_req_finished
(
request
);
if
(
!
err
)
d_move
(
old_dentry
,
new_dentry
);
return
err
;
}
...
...
drivers/staging/lustre/lustre/llite/statahead.c
浏览文件 @
e63fa0d4
...
...
@@ -969,8 +969,8 @@ static int ll_agl_thread(void *arg)
struct
l_wait_info
lwi
=
{
0
};
thread
->
t_pid
=
current_pid
();
CDEBUG
(
D_READA
,
"agl thread started: sai %p, parent %
.*s
\n
"
,
sai
,
parent
->
d_name
.
len
,
parent
->
d_name
.
name
);
CDEBUG
(
D_READA
,
"agl thread started: sai %p, parent %
pd
\n
"
,
sai
,
parent
);
atomic_inc
(
&
sbi
->
ll_agl_total
);
spin_lock
(
&
plli
->
lli_agl_lock
);
...
...
@@ -1019,8 +1019,8 @@ static int ll_agl_thread(void *arg)
spin_unlock
(
&
plli
->
lli_agl_lock
);
wake_up
(
&
thread
->
t_ctl_waitq
);
ll_sai_put
(
sai
);
CDEBUG
(
D_READA
,
"agl thread stopped: sai %p, parent %
.*s
\n
"
,
sai
,
parent
->
d_name
.
len
,
parent
->
d_name
.
name
);
CDEBUG
(
D_READA
,
"agl thread stopped: sai %p, parent %
pd
\n
"
,
sai
,
parent
);
return
0
;
}
...
...
@@ -1031,8 +1031,8 @@ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
struct
ll_inode_info
*
plli
;
struct
task_struct
*
task
;
CDEBUG
(
D_READA
,
"start agl thread: sai %p, parent %
.*s
\n
"
,
sai
,
parent
->
d_name
.
len
,
parent
->
d_name
.
name
);
CDEBUG
(
D_READA
,
"start agl thread: sai %p, parent %
pd
\n
"
,
sai
,
parent
);
plli
=
ll_i2info
(
parent
->
d_inode
);
task
=
kthread_run
(
ll_agl_thread
,
parent
,
...
...
@@ -1066,8 +1066,8 @@ static int ll_statahead_thread(void *arg)
struct
l_wait_info
lwi
=
{
0
};
thread
->
t_pid
=
current_pid
();
CDEBUG
(
D_READA
,
"statahead thread starting: sai %p, parent %
.*s
\n
"
,
sai
,
parent
->
d_name
.
len
,
parent
->
d_name
.
name
);
CDEBUG
(
D_READA
,
"statahead thread starting: sai %p, parent %
pd
\n
"
,
sai
,
parent
);
if
(
sbi
->
ll_flags
&
LL_SBI_AGL_ENABLED
)
ll_start_agl
(
parent
,
sai
);
...
...
@@ -1288,8 +1288,8 @@ static int ll_statahead_thread(void *arg)
wake_up
(
&
thread
->
t_ctl_waitq
);
ll_sai_put
(
sai
);
dput
(
parent
);
CDEBUG
(
D_READA
,
"statahead thread stopped: sai %p, parent %
.*s
\n
"
,
sai
,
parent
->
d_name
.
len
,
parent
->
d_name
.
name
);
CDEBUG
(
D_READA
,
"statahead thread stopped: sai %p, parent %
pd
\n
"
,
sai
,
parent
);
return
rc
;
}
...
...
@@ -1612,10 +1612,9 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
}
else
if
((
*
dentryp
)
->
d_inode
!=
inode
)
{
/* revalidate, but inode is recreated */
CDEBUG
(
D_READA
,
"stale dentry %
.*s
inode %lu/%u, "
"stale dentry %
pd
inode %lu/%u, "
"statahead inode %lu/%u
\n
"
,
(
*
dentryp
)
->
d_name
.
len
,
(
*
dentryp
)
->
d_name
.
name
,
*
dentryp
,
(
*
dentryp
)
->
d_inode
->
i_ino
,
(
*
dentryp
)
->
d_inode
->
i_generation
,
inode
->
i_ino
,
...
...
@@ -1666,9 +1665,9 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
if
(
unlikely
(
sai
->
sai_inode
!=
parent
->
d_inode
))
{
struct
ll_inode_info
*
nlli
=
ll_i2info
(
parent
->
d_inode
);
CWARN
(
"Race condition, someone changed %
.*s
just now: "
CWARN
(
"Race condition, someone changed %
pd
just now: "
"old parent "
DFID
", new parent "
DFID
"
\n
"
,
(
*
dentryp
)
->
d_name
.
len
,
(
*
dentryp
)
->
d_name
.
name
,
*
dentryp
,
PFID
(
&
lli
->
lli_fid
),
PFID
(
&
nlli
->
lli_fid
));
dput
(
parent
);
iput
(
sai
->
sai_inode
);
...
...
@@ -1676,8 +1675,8 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
goto
out
;
}
CDEBUG
(
D_READA
,
"start statahead thread: sai %p, parent %
.*s
\n
"
,
sai
,
parent
->
d_name
.
len
,
parent
->
d_name
.
name
);
CDEBUG
(
D_READA
,
"start statahead thread: sai %p, parent %
pd
\n
"
,
sai
,
parent
);
/* The sai buffer already has one reference taken at allocation time,
* but as soon as we expose the sai by attaching it to the lli that
...
...
drivers/staging/lustre/lustre/llite/vvp_io.c
浏览文件 @
e63fa0d4
...
...
@@ -108,7 +108,7 @@ static int vvp_io_fault_iter_init(const struct lu_env *env,
struct
inode
*
inode
=
ccc_object_inode
(
ios
->
cis_obj
);
LASSERT
(
inode
==
cl2ccc_io
(
env
,
ios
)
->
cui_fd
->
fd_file
->
f_dentry
->
d_inode
);
file_inode
(
cl2ccc_io
(
env
,
ios
)
->
cui_fd
->
fd_file
)
);
vio
->
u
.
fault
.
ft_mtime
=
LTIME_S
(
inode
->
i_mtime
);
return
0
;
}
...
...
@@ -239,7 +239,7 @@ static int vvp_mmap_locks(const struct lu_env *env,
down_read
(
&
mm
->
mmap_sem
);
while
((
vma
=
our_vma
(
mm
,
addr
,
count
))
!=
NULL
)
{
struct
inode
*
inode
=
vma
->
vm_file
->
f_dentry
->
d_inode
;
struct
inode
*
inode
=
file_inode
(
vma
->
vm_file
)
;
int
flags
=
CEF_MUST
;
if
(
ll_file_nolock
(
vma
->
vm_file
))
{
...
...
drivers/staging/lustre/lustre/llite/xattr.c
浏览文件 @
e63fa0d4
...
...
@@ -241,14 +241,11 @@ int ll_setxattr(struct dentry *dentry, const char *name,
lump
->
lmm_stripe_offset
=
-
1
;
if
(
lump
!=
NULL
&&
S_ISREG
(
inode
->
i_mode
))
{
struct
file
f
;
int
flags
=
FMODE_WRITE
;
int
lum_size
=
(
lump
->
lmm_magic
==
LOV_USER_MAGIC_V1
)
?
sizeof
(
*
lump
)
:
sizeof
(
struct
lov_user_md_v3
);
memset
(
&
f
,
0
,
sizeof
(
f
));
/* f.f_flags is used below */
f
.
f_dentry
=
dentry
;
rc
=
ll_lov_setstripe_ea_info
(
inode
,
&
f
,
flags
,
lump
,
rc
=
ll_lov_setstripe_ea_info
(
inode
,
dentry
,
flags
,
lump
,
lum_size
);
/* b10667: rc always be 0 here for now */
rc
=
0
;
...
...
@@ -519,8 +516,8 @@ ssize_t ll_getxattr(struct dentry *dentry, const char *name,
}
if
(
size
<
lmmsize
)
{
CERROR
(
"server bug: replied size %d > %d for %
s
(%s)
\n
"
,
lmmsize
,
(
int
)
size
,
dentry
->
d_name
.
name
,
name
);
CERROR
(
"server bug: replied size %d > %d for %
pd
(%s)
\n
"
,
lmmsize
,
(
int
)
size
,
dentry
,
name
);
rc
=
-
ERANGE
;
goto
out
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录