Lines 77-90
ssize_t unionfs_getxattr(struct dentry *
Link Here
|
77 |
|
77 |
|
78 |
encoded_value = (char *)value; |
78 |
encoded_value = (char *)value; |
79 |
|
79 |
|
80 |
down(&hidden_dentry->d_inode->i_sem); |
80 |
mutex_lock(&hidden_dentry->d_inode->i_mutex); |
81 |
/* lock_kernel() already done by caller. */ |
81 |
/* lock_kernel() already done by caller. */ |
82 |
err = |
82 |
err = |
83 |
hidden_dentry->d_inode->i_op->getxattr(hidden_dentry, |
83 |
hidden_dentry->d_inode->i_op->getxattr(hidden_dentry, |
84 |
encoded_name, |
84 |
encoded_name, |
85 |
encoded_value, size); |
85 |
encoded_value, size); |
86 |
/* unlock_kernel() will be done by caller. */ |
86 |
/* unlock_kernel() will be done by caller. */ |
87 |
up(&hidden_dentry->d_inode->i_sem); |
87 |
mutex_unlock(&hidden_dentry->d_inode->i_mutex); |
88 |
|
88 |
|
89 |
} |
89 |
} |
90 |
|
90 |
|
Lines 112-123
unionfs_setxattr(struct dentry *dentry,
Link Here
|
112 |
name, (unsigned long)size, flags); |
112 |
name, (unsigned long)size, flags); |
113 |
|
113 |
|
114 |
if (hidden_dentry->d_inode->i_op->setxattr) { |
114 |
if (hidden_dentry->d_inode->i_op->setxattr) { |
115 |
down(&hidden_dentry->d_inode->i_sem); |
115 |
mutex_lock(&hidden_dentry->d_inode->i_mutex); |
116 |
/* lock_kernel() already done by caller. */ |
116 |
/* lock_kernel() already done by caller. */ |
117 |
err = hidden_dentry->d_inode->i_op-> |
117 |
err = hidden_dentry->d_inode->i_op-> |
118 |
setxattr(hidden_dentry, name, value, size, flags); |
118 |
setxattr(hidden_dentry, name, value, size, flags); |
119 |
/* unlock_kernel() will be done by caller. */ |
119 |
/* unlock_kernel() will be done by caller. */ |
120 |
up(&hidden_dentry->d_inode->i_sem); |
120 |
mutex_unlock(&hidden_dentry->d_inode->i_mutex); |
121 |
} |
121 |
} |
122 |
|
122 |
|
123 |
unlock_dentry(dentry); |
123 |
unlock_dentry(dentry); |
Lines 143-155
int unionfs_removexattr(struct dentry *d
Link Here
|
143 |
if (hidden_dentry->d_inode->i_op->removexattr) { |
143 |
if (hidden_dentry->d_inode->i_op->removexattr) { |
144 |
encoded_name = (char *)name; |
144 |
encoded_name = (char *)name; |
145 |
|
145 |
|
146 |
down(&hidden_dentry->d_inode->i_sem); |
146 |
mutex_lock(&hidden_dentry->d_inode->i_mutex); |
147 |
/* lock_kernel() already done by caller. */ |
147 |
/* lock_kernel() already done by caller. */ |
148 |
err = |
148 |
err = |
149 |
hidden_dentry->d_inode->i_op->removexattr(hidden_dentry, |
149 |
hidden_dentry->d_inode->i_op->removexattr(hidden_dentry, |
150 |
encoded_name); |
150 |
encoded_name); |
151 |
/* unlock_kernel() will be done by caller. */ |
151 |
/* unlock_kernel() will be done by caller. */ |
152 |
up(&hidden_dentry->d_inode->i_sem); |
152 |
mutex_unlock(&hidden_dentry->d_inode->i_mutex); |
153 |
} |
153 |
} |
154 |
|
154 |
|
155 |
unlock_dentry(dentry); |
155 |
unlock_dentry(dentry); |
Lines 173-185
ssize_t unionfs_listxattr(struct dentry
Link Here
|
173 |
|
173 |
|
174 |
if (hidden_dentry->d_inode->i_op->listxattr) { |
174 |
if (hidden_dentry->d_inode->i_op->listxattr) { |
175 |
encoded_list = list; |
175 |
encoded_list = list; |
176 |
down(&hidden_dentry->d_inode->i_sem); |
176 |
mutex_lock(&hidden_dentry->d_inode->i_mutex); |
177 |
/* lock_kernel() already done by caller. */ |
177 |
/* lock_kernel() already done by caller. */ |
178 |
err = |
178 |
err = |
179 |
hidden_dentry->d_inode->i_op->listxattr(hidden_dentry, |
179 |
hidden_dentry->d_inode->i_op->listxattr(hidden_dentry, |
180 |
encoded_list, size); |
180 |
encoded_list, size); |
181 |
/* unlock_kernel() will be done by caller. */ |
181 |
/* unlock_kernel() will be done by caller. */ |
182 |
up(&hidden_dentry->d_inode->i_sem); |
182 |
mutex_unlock(&hidden_dentry->d_inode->i_mutex); |
183 |
} |
183 |
} |
184 |
|
184 |
|
185 |
unlock_dentry(dentry); |
185 |
unlock_dentry(dentry); |