140
struct dentry *parent;
142
LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
145
parent = dget_parent(dentry);
146
if (parent->d_inode == dir) {
148
err = vfs_mknod(dir, dentry, mode, dev);
151
au_update_fuse_h_inode(NULL, parent); /*ignore*/
152
au_update_fuse_h_inode(NULL, dentry); /*ignore*/
159
int do_vfsub_mkdir(struct inode *dir, struct dentry *dentry, int mode)
162
struct dentry *parent;
164
LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
167
parent = dget_parent(dentry);
168
if (parent->d_inode == dir) {
170
err = vfs_mkdir(dir, dentry, mode);
173
au_update_fuse_h_inode(NULL, parent); /*ignore*/
174
au_update_fuse_h_inode(NULL, dentry); /*ignore*/
128
LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
131
err = vfs_mknod(dir, dentry, mode, dev);
133
/* dir inode is locked */
134
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
135
au_update_fuse_h_inode(NULL, dentry); /*ignore*/
212
165
struct inode *dir, struct dentry *dentry)
215
struct dentry *parent, *src_parent;
217
169
LKTRTrace("i%lu, %.*s, i%lu, %.*s\n",
218
170
src_dir->i_ino, AuDLNPair(src_dentry),
219
171
dir->i_ino, AuDLNPair(dentry));
223
src_parent = dget_parent(src_dentry);
224
if (src_parent->d_inode == src_dir) {
226
parent = dget_parent(dentry);
227
if (parent->d_inode == dir)
234
err = vfs_rename(src_dir, src_dentry, dir, dentry);
239
au_update_fuse_h_inode(NULL, parent); /*ignore*/
240
au_update_fuse_h_inode(NULL, src_parent); /*ignore*/
176
err = vfs_rename(src_dir, src_dentry, dir, dentry);
179
/* dir inode is locked */
180
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
181
au_update_fuse_h_inode(NULL, src_dentry->d_parent); /*ignore*/
241
182
au_update_fuse_h_inode(NULL, src_dentry); /*ignore*/
187
int do_vfsub_mkdir(struct inode *dir, struct dentry *dentry, int mode)
191
LKTRTrace("i%lu, %.*s, 0x%x\n", dir->i_ino, AuDLNPair(dentry), mode);
194
err = vfs_mkdir(dir, dentry, mode);
196
/* dir inode is locked */
197
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
198
au_update_fuse_h_inode(NULL, dentry); /*ignore*/
249
203
int do_vfsub_rmdir(struct inode *dir, struct dentry *dentry)
252
struct dentry *parent;
254
207
LKTRTrace("i%lu, %.*s\n", dir->i_ino, AuDLNPair(dentry));
257
parent = dget_parent(dentry);
258
if (parent->d_inode == dir) {
261
err = vfs_rmdir(dir, dentry);
211
err = vfs_rmdir(dir, dentry);
213
/* dir inode is locked */
265
au_update_fuse_h_inode(NULL, parent); /*ignore*/
215
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
271
219
int do_vfsub_unlink(struct inode *dir, struct dentry *dentry)
274
struct dentry *parent;
276
223
LKTRTrace("i%lu, %.*s\n", dir->i_ino, AuDLNPair(dentry));
279
parent = dget_parent(dentry);
280
if (parent->d_inode == dir) {
282
/* vfs_unlink() locks inode */
226
/* vfs_unlink() locks inode */
228
err = vfs_unlink(dir, dentry);
230
/* dir inode is locked */
232
au_update_fuse_h_inode(NULL, dentry->d_parent); /*ignore*/
236
/* ---------------------------------------------------------------------- */
238
ssize_t do_vfsub_read_u(struct file *file, char __user *ubuf, size_t count,
243
LKTRTrace("%.*s, cnt %lu, pos %Ld\n",
244
AuDLNPair(file->f_dentry), (unsigned long)count, *ppos);
246
if (0 /*!au_test_nfs(file->f_vfsmnt->mnt_sb)*/)
247
err = vfs_read(file, ubuf, count, ppos);
284
err = vfs_unlink(dir, dentry);
250
err = vfs_read(file, ubuf, count, ppos);
288
au_update_fuse_h_inode(NULL, parent); /*ignore*/
254
au_update_fuse_h_inode(file->f_vfsmnt, file->f_dentry);
260
ssize_t do_vfsub_read_k(struct file *file, void *kbuf, size_t count,
268
err = do_vfsub_read_u(file, (char __user *)kbuf, count, ppos);
273
ssize_t do_vfsub_write_u(struct file *file, const char __user *ubuf,
274
size_t count, loff_t *ppos)
278
LKTRTrace("%.*s, cnt %lu, pos %Ld\n",
279
AuDLNPair(file->f_dentry), (unsigned long)count, *ppos);
282
err = vfs_write(file, ubuf, count, ppos);
285
au_update_fuse_h_inode(file->f_vfsmnt, file->f_dentry);
290
ssize_t do_vfsub_write_k(struct file *file, void *kbuf, size_t count,
298
err = do_vfsub_write_u(file, (const char __user *)kbuf, count, ppos);
303
int do_vfsub_readdir(struct file *file, filldir_t filldir, void *arg)
307
LKTRTrace("%.*s\n", AuDLNPair(file->f_dentry));
310
err = vfs_readdir(file, filldir, arg);
313
au_update_fuse_h_inode(file->f_vfsmnt, file->f_dentry);
318
#ifdef CONFIG_AUFS_SPLICE_PATCH
319
long do_vfsub_splice_to(struct file *in, loff_t *ppos,
320
struct pipe_inode_info *pipe, size_t len,
325
LKTRTrace("%.*s, pos %Ld, len %lu, 0x%x\n",
326
AuDLNPair(in->f_dentry), *ppos, (unsigned long)len, flags);
329
err = do_splice_to(in, ppos, pipe, len, flags);
332
au_update_fuse_h_inode(in->f_vfsmnt, in->f_dentry); /*ignore*/
336
long do_vfsub_splice_from(struct pipe_inode_info *pipe, struct file *out,
337
loff_t *ppos, size_t len, unsigned int flags)
341
LKTRTrace("%.*s, pos %Ld, len %lu, 0x%x\n",
342
AuDLNPair(out->f_dentry), *ppos, (unsigned long)len, flags);
345
err = do_splice_from(pipe, out, ppos, len, flags);
348
au_update_fuse_h_inode(out->f_vfsmnt, out->f_dentry); /*ignore*/