GFS2: Remove rs_requested field from reservations
[deliverable/linux.git] / fs / gfs2 / inode.c
1 /*
2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
4 *
5 * This copyrighted material is made available to anyone wishing to use,
6 * modify, copy, or redistribute it subject to the terms and conditions
7 * of the GNU General Public License version 2.
8 */
9
10 #include <linux/slab.h>
11 #include <linux/spinlock.h>
12 #include <linux/completion.h>
13 #include <linux/buffer_head.h>
14 #include <linux/namei.h>
15 #include <linux/mm.h>
16 #include <linux/xattr.h>
17 #include <linux/posix_acl.h>
18 #include <linux/gfs2_ondisk.h>
19 #include <linux/crc32.h>
20 #include <linux/fiemap.h>
21 #include <linux/security.h>
22 #include <asm/uaccess.h>
23
24 #include "gfs2.h"
25 #include "incore.h"
26 #include "acl.h"
27 #include "bmap.h"
28 #include "dir.h"
29 #include "xattr.h"
30 #include "glock.h"
31 #include "inode.h"
32 #include "meta_io.h"
33 #include "quota.h"
34 #include "rgrp.h"
35 #include "trans.h"
36 #include "util.h"
37 #include "super.h"
38 #include "glops.h"
39
40 struct gfs2_skip_data {
41 u64 no_addr;
42 int skipped;
43 int non_block;
44 };
45
46 static int iget_test(struct inode *inode, void *opaque)
47 {
48 struct gfs2_inode *ip = GFS2_I(inode);
49 struct gfs2_skip_data *data = opaque;
50
51 if (ip->i_no_addr == data->no_addr) {
52 if (data->non_block &&
53 inode->i_state & (I_FREEING|I_CLEAR|I_WILL_FREE)) {
54 data->skipped = 1;
55 return 0;
56 }
57 return 1;
58 }
59 return 0;
60 }
61
62 static int iget_set(struct inode *inode, void *opaque)
63 {
64 struct gfs2_inode *ip = GFS2_I(inode);
65 struct gfs2_skip_data *data = opaque;
66
67 if (data->skipped)
68 return -ENOENT;
69 inode->i_ino = (unsigned long)(data->no_addr);
70 ip->i_no_addr = data->no_addr;
71 return 0;
72 }
73
74 struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr, int non_block)
75 {
76 unsigned long hash = (unsigned long)no_addr;
77 struct gfs2_skip_data data;
78
79 data.no_addr = no_addr;
80 data.skipped = 0;
81 data.non_block = non_block;
82 return ilookup5(sb, hash, iget_test, &data);
83 }
84
85 static struct inode *gfs2_iget(struct super_block *sb, u64 no_addr,
86 int non_block)
87 {
88 struct gfs2_skip_data data;
89 unsigned long hash = (unsigned long)no_addr;
90
91 data.no_addr = no_addr;
92 data.skipped = 0;
93 data.non_block = non_block;
94 return iget5_locked(sb, hash, iget_test, iget_set, &data);
95 }
96
97 /**
98 * gfs2_set_iop - Sets inode operations
99 * @inode: The inode with correct i_mode filled in
100 *
101 * GFS2 lookup code fills in vfs inode contents based on info obtained
102 * from directory entry inside gfs2_inode_lookup().
103 */
104
105 static void gfs2_set_iop(struct inode *inode)
106 {
107 struct gfs2_sbd *sdp = GFS2_SB(inode);
108 umode_t mode = inode->i_mode;
109
110 if (S_ISREG(mode)) {
111 inode->i_op = &gfs2_file_iops;
112 if (gfs2_localflocks(sdp))
113 inode->i_fop = &gfs2_file_fops_nolock;
114 else
115 inode->i_fop = &gfs2_file_fops;
116 } else if (S_ISDIR(mode)) {
117 inode->i_op = &gfs2_dir_iops;
118 if (gfs2_localflocks(sdp))
119 inode->i_fop = &gfs2_dir_fops_nolock;
120 else
121 inode->i_fop = &gfs2_dir_fops;
122 } else if (S_ISLNK(mode)) {
123 inode->i_op = &gfs2_symlink_iops;
124 } else {
125 inode->i_op = &gfs2_file_iops;
126 init_special_inode(inode, inode->i_mode, inode->i_rdev);
127 }
128 }
129
130 /**
131 * gfs2_inode_lookup - Lookup an inode
132 * @sb: The super block
133 * @no_addr: The inode number
134 * @type: The type of the inode
135 * non_block: Can we block on inodes that are being freed?
136 *
137 * Returns: A VFS inode, or an error
138 */
139
140 struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type,
141 u64 no_addr, u64 no_formal_ino, int non_block)
142 {
143 struct inode *inode;
144 struct gfs2_inode *ip;
145 struct gfs2_glock *io_gl = NULL;
146 int error;
147
148 inode = gfs2_iget(sb, no_addr, non_block);
149 ip = GFS2_I(inode);
150
151 if (!inode)
152 return ERR_PTR(-ENOBUFS);
153
154 if (inode->i_state & I_NEW) {
155 struct gfs2_sbd *sdp = GFS2_SB(inode);
156 ip->i_no_formal_ino = no_formal_ino;
157
158 error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl);
159 if (unlikely(error))
160 goto fail;
161 ip->i_gl->gl_object = ip;
162
163 error = gfs2_glock_get(sdp, no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
164 if (unlikely(error))
165 goto fail_put;
166
167 set_bit(GIF_INVALID, &ip->i_flags);
168 error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
169 if (unlikely(error))
170 goto fail_iopen;
171
172 ip->i_iopen_gh.gh_gl->gl_object = ip;
173 gfs2_glock_put(io_gl);
174 io_gl = NULL;
175
176 if (type == DT_UNKNOWN) {
177 /* Inode glock must be locked already */
178 error = gfs2_inode_refresh(GFS2_I(inode));
179 if (error)
180 goto fail_refresh;
181 } else {
182 inode->i_mode = DT2IF(type);
183 }
184
185 gfs2_set_iop(inode);
186 unlock_new_inode(inode);
187 }
188
189 return inode;
190
191 fail_refresh:
192 ip->i_iopen_gh.gh_gl->gl_object = NULL;
193 gfs2_glock_dq_uninit(&ip->i_iopen_gh);
194 fail_iopen:
195 if (io_gl)
196 gfs2_glock_put(io_gl);
197 fail_put:
198 ip->i_gl->gl_object = NULL;
199 gfs2_glock_put(ip->i_gl);
200 fail:
201 iget_failed(inode);
202 return ERR_PTR(error);
203 }
204
205 struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr,
206 u64 *no_formal_ino, unsigned int blktype)
207 {
208 struct super_block *sb = sdp->sd_vfs;
209 struct gfs2_holder i_gh;
210 struct inode *inode = NULL;
211 int error;
212
213 /* Must not read in block until block type is verified */
214 error = gfs2_glock_nq_num(sdp, no_addr, &gfs2_inode_glops,
215 LM_ST_EXCLUSIVE, GL_SKIP, &i_gh);
216 if (error)
217 return ERR_PTR(error);
218
219 error = gfs2_check_blk_type(sdp, no_addr, blktype);
220 if (error)
221 goto fail;
222
223 inode = gfs2_inode_lookup(sb, DT_UNKNOWN, no_addr, 0, 1);
224 if (IS_ERR(inode))
225 goto fail;
226
227 /* Two extra checks for NFS only */
228 if (no_formal_ino) {
229 error = -ESTALE;
230 if (GFS2_I(inode)->i_no_formal_ino != *no_formal_ino)
231 goto fail_iput;
232
233 error = -EIO;
234 if (GFS2_I(inode)->i_diskflags & GFS2_DIF_SYSTEM)
235 goto fail_iput;
236
237 error = 0;
238 }
239
240 fail:
241 gfs2_glock_dq_uninit(&i_gh);
242 return error ? ERR_PTR(error) : inode;
243 fail_iput:
244 iput(inode);
245 goto fail;
246 }
247
248
249 struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
250 {
251 struct qstr qstr;
252 struct inode *inode;
253 gfs2_str2qstr(&qstr, name);
254 inode = gfs2_lookupi(dip, &qstr, 1);
255 /* gfs2_lookupi has inconsistent callers: vfs
256 * related routines expect NULL for no entry found,
257 * gfs2_lookup_simple callers expect ENOENT
258 * and do not check for NULL.
259 */
260 if (inode == NULL)
261 return ERR_PTR(-ENOENT);
262 else
263 return inode;
264 }
265
266
267 /**
268 * gfs2_lookupi - Look up a filename in a directory and return its inode
269 * @d_gh: An initialized holder for the directory glock
270 * @name: The name of the inode to look for
271 * @is_root: If 1, ignore the caller's permissions
272 * @i_gh: An uninitialized holder for the new inode glock
273 *
274 * This can be called via the VFS filldir function when NFS is doing
275 * a readdirplus and the inode which its intending to stat isn't
276 * already in cache. In this case we must not take the directory glock
277 * again, since the readdir call will have already taken that lock.
278 *
279 * Returns: errno
280 */
281
282 struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
283 int is_root)
284 {
285 struct super_block *sb = dir->i_sb;
286 struct gfs2_inode *dip = GFS2_I(dir);
287 struct gfs2_holder d_gh;
288 int error = 0;
289 struct inode *inode = NULL;
290 int unlock = 0;
291
292 if (!name->len || name->len > GFS2_FNAMESIZE)
293 return ERR_PTR(-ENAMETOOLONG);
294
295 if ((name->len == 1 && memcmp(name->name, ".", 1) == 0) ||
296 (name->len == 2 && memcmp(name->name, "..", 2) == 0 &&
297 dir == sb->s_root->d_inode)) {
298 igrab(dir);
299 return dir;
300 }
301
302 if (gfs2_glock_is_locked_by_me(dip->i_gl) == NULL) {
303 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
304 if (error)
305 return ERR_PTR(error);
306 unlock = 1;
307 }
308
309 if (!is_root) {
310 error = gfs2_permission(dir, MAY_EXEC);
311 if (error)
312 goto out;
313 }
314
315 inode = gfs2_dir_search(dir, name);
316 if (IS_ERR(inode))
317 error = PTR_ERR(inode);
318 out:
319 if (unlock)
320 gfs2_glock_dq_uninit(&d_gh);
321 if (error == -ENOENT)
322 return NULL;
323 return inode ? inode : ERR_PTR(error);
324 }
325
326 /**
327 * create_ok - OK to create a new on-disk inode here?
328 * @dip: Directory in which dinode is to be created
329 * @name: Name of new dinode
330 * @mode:
331 *
332 * Returns: errno
333 */
334
335 static int create_ok(struct gfs2_inode *dip, const struct qstr *name,
336 umode_t mode)
337 {
338 int error;
339
340 error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
341 if (error)
342 return error;
343
344 /* Don't create entries in an unlinked directory */
345 if (!dip->i_inode.i_nlink)
346 return -ENOENT;
347
348 error = gfs2_dir_check(&dip->i_inode, name, NULL);
349 switch (error) {
350 case -ENOENT:
351 error = 0;
352 break;
353 case 0:
354 return -EEXIST;
355 default:
356 return error;
357 }
358
359 if (dip->i_entries == (u32)-1)
360 return -EFBIG;
361 if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1)
362 return -EMLINK;
363
364 return 0;
365 }
366
367 static void munge_mode_uid_gid(struct gfs2_inode *dip, umode_t *mode,
368 unsigned int *uid, unsigned int *gid)
369 {
370 if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir &&
371 (dip->i_inode.i_mode & S_ISUID) && dip->i_inode.i_uid) {
372 if (S_ISDIR(*mode))
373 *mode |= S_ISUID;
374 else if (dip->i_inode.i_uid != current_fsuid())
375 *mode &= ~07111;
376 *uid = dip->i_inode.i_uid;
377 } else
378 *uid = current_fsuid();
379
380 if (dip->i_inode.i_mode & S_ISGID) {
381 if (S_ISDIR(*mode))
382 *mode |= S_ISGID;
383 *gid = dip->i_inode.i_gid;
384 } else
385 *gid = current_fsgid();
386 }
387
388 static int alloc_dinode(struct gfs2_inode *dip, u64 *no_addr, u64 *generation)
389 {
390 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
391 int error;
392 int dblocks = 1;
393
394 error = gfs2_inplace_reserve(dip, RES_DINODE);
395 if (error)
396 goto out;
397
398 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS, 0);
399 if (error)
400 goto out_ipreserv;
401
402 error = gfs2_alloc_blocks(dip, no_addr, &dblocks, 1, generation);
403
404 gfs2_trans_end(sdp);
405
406 out_ipreserv:
407 gfs2_inplace_release(dip);
408 out:
409 return error;
410 }
411
412 static void gfs2_init_dir(struct buffer_head *dibh,
413 const struct gfs2_inode *parent)
414 {
415 struct gfs2_dinode *di = (struct gfs2_dinode *)dibh->b_data;
416 struct gfs2_dirent *dent = (struct gfs2_dirent *)(di+1);
417
418 gfs2_qstr2dirent(&gfs2_qdot, GFS2_DIRENT_SIZE(gfs2_qdot.len), dent);
419 dent->de_inum = di->di_num; /* already GFS2 endian */
420 dent->de_type = cpu_to_be16(DT_DIR);
421
422 dent = (struct gfs2_dirent *)((char*)dent + GFS2_DIRENT_SIZE(1));
423 gfs2_qstr2dirent(&gfs2_qdotdot, dibh->b_size - GFS2_DIRENT_SIZE(1) - sizeof(struct gfs2_dinode), dent);
424 gfs2_inum_out(parent, dent);
425 dent->de_type = cpu_to_be16(DT_DIR);
426
427 }
428
429 /**
430 * init_dinode - Fill in a new dinode structure
431 * @dip: The directory this inode is being created in
432 * @gl: The glock covering the new inode
433 * @inum: The inode number
434 * @mode: The file permissions
435 * @uid: The uid of the new inode
436 * @gid: The gid of the new inode
437 * @generation: The generation number of the new inode
438 * @dev: The device number (if a device node)
439 * @symname: The symlink destination (if a symlink)
440 * @size: The inode size (ignored for directories)
441 * @bhp: The buffer head (returned to caller)
442 *
443 */
444
445 static void init_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl,
446 const struct gfs2_inum_host *inum, umode_t mode,
447 unsigned int uid, unsigned int gid,
448 const u64 *generation, dev_t dev, const char *symname,
449 unsigned size, struct buffer_head **bhp)
450 {
451 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
452 struct gfs2_dinode *di;
453 struct buffer_head *dibh;
454 struct timespec tv = CURRENT_TIME;
455
456 dibh = gfs2_meta_new(gl, inum->no_addr);
457 gfs2_trans_add_bh(gl, dibh, 1);
458 gfs2_metatype_set(dibh, GFS2_METATYPE_DI, GFS2_FORMAT_DI);
459 gfs2_buffer_clear_tail(dibh, sizeof(struct gfs2_dinode));
460 di = (struct gfs2_dinode *)dibh->b_data;
461
462 di->di_num.no_formal_ino = cpu_to_be64(inum->no_formal_ino);
463 di->di_num.no_addr = cpu_to_be64(inum->no_addr);
464 di->di_mode = cpu_to_be32(mode);
465 di->di_uid = cpu_to_be32(uid);
466 di->di_gid = cpu_to_be32(gid);
467 di->di_nlink = 0;
468 di->di_size = cpu_to_be64(size);
469 di->di_blocks = cpu_to_be64(1);
470 di->di_atime = di->di_mtime = di->di_ctime = cpu_to_be64(tv.tv_sec);
471 di->di_major = cpu_to_be32(MAJOR(dev));
472 di->di_minor = cpu_to_be32(MINOR(dev));
473 di->di_goal_meta = di->di_goal_data = cpu_to_be64(inum->no_addr);
474 di->di_generation = cpu_to_be64(*generation);
475 di->di_flags = 0;
476 di->__pad1 = 0;
477 di->di_payload_format = cpu_to_be32(S_ISDIR(mode) ? GFS2_FORMAT_DE : 0);
478 di->di_height = 0;
479 di->__pad2 = 0;
480 di->__pad3 = 0;
481 di->di_depth = 0;
482 di->di_entries = 0;
483 memset(&di->__pad4, 0, sizeof(di->__pad4));
484 di->di_eattr = 0;
485 di->di_atime_nsec = cpu_to_be32(tv.tv_nsec);
486 di->di_mtime_nsec = cpu_to_be32(tv.tv_nsec);
487 di->di_ctime_nsec = cpu_to_be32(tv.tv_nsec);
488 memset(&di->di_reserved, 0, sizeof(di->di_reserved));
489
490 switch(mode & S_IFMT) {
491 case S_IFREG:
492 if ((dip->i_diskflags & GFS2_DIF_INHERIT_JDATA) ||
493 gfs2_tune_get(sdp, gt_new_files_jdata))
494 di->di_flags |= cpu_to_be32(GFS2_DIF_JDATA);
495 break;
496 case S_IFDIR:
497 di->di_flags |= cpu_to_be32(dip->i_diskflags &
498 GFS2_DIF_INHERIT_JDATA);
499 di->di_flags |= cpu_to_be32(GFS2_DIF_JDATA);
500 di->di_size = cpu_to_be64(sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode));
501 di->di_entries = cpu_to_be32(2);
502 gfs2_init_dir(dibh, dip);
503 break;
504 case S_IFLNK:
505 memcpy(dibh->b_data + sizeof(struct gfs2_dinode), symname, size);
506 break;
507 }
508
509 set_buffer_uptodate(dibh);
510
511 *bhp = dibh;
512 }
513
514 static int make_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl,
515 umode_t mode, const struct gfs2_inum_host *inum,
516 const u64 *generation, dev_t dev, const char *symname,
517 unsigned int size, struct buffer_head **bhp)
518 {
519 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
520 unsigned int uid, gid;
521 int error;
522
523 munge_mode_uid_gid(dip, &mode, &uid, &gid);
524 error = gfs2_rindex_update(sdp);
525 if (error)
526 return error;
527
528 error = gfs2_quota_lock(dip, uid, gid);
529 if (error)
530 return error;
531
532 error = gfs2_quota_check(dip, uid, gid);
533 if (error)
534 goto out_quota;
535
536 error = gfs2_trans_begin(sdp, RES_DINODE + RES_QUOTA, 0);
537 if (error)
538 goto out_quota;
539
540 init_dinode(dip, gl, inum, mode, uid, gid, generation, dev, symname, size, bhp);
541 gfs2_quota_change(dip, +1, uid, gid);
542 gfs2_trans_end(sdp);
543
544 out_quota:
545 gfs2_quota_unlock(dip);
546 return error;
547 }
548
549 static int link_dinode(struct gfs2_inode *dip, const struct qstr *name,
550 struct gfs2_inode *ip)
551 {
552 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
553 int alloc_required;
554 struct buffer_head *dibh;
555 int error;
556
557 error = gfs2_rindex_update(sdp);
558 if (error)
559 return error;
560
561 error = gfs2_quota_lock(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
562 if (error)
563 goto fail;
564
565 error = alloc_required = gfs2_diradd_alloc_required(&dip->i_inode, name);
566 if (alloc_required < 0)
567 goto fail_quota_locks;
568 if (alloc_required) {
569 error = gfs2_quota_check(dip, dip->i_inode.i_uid, dip->i_inode.i_gid);
570 if (error)
571 goto fail_quota_locks;
572
573 error = gfs2_inplace_reserve(dip, sdp->sd_max_dirres);
574 if (error)
575 goto fail_quota_locks;
576
577 error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
578 dip->i_rgd->rd_length +
579 2 * RES_DINODE +
580 RES_STATFS + RES_QUOTA, 0);
581 if (error)
582 goto fail_ipreserv;
583 } else {
584 error = gfs2_trans_begin(sdp, RES_LEAF + 2 * RES_DINODE, 0);
585 if (error)
586 goto fail_quota_locks;
587 }
588
589 error = gfs2_dir_add(&dip->i_inode, name, ip);
590 if (error)
591 goto fail_end_trans;
592
593 error = gfs2_meta_inode_buffer(ip, &dibh);
594 if (error)
595 goto fail_end_trans;
596 set_nlink(&ip->i_inode, S_ISDIR(ip->i_inode.i_mode) ? 2 : 1);
597 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
598 gfs2_dinode_out(ip, dibh->b_data);
599 brelse(dibh);
600 return 0;
601
602 fail_end_trans:
603 gfs2_trans_end(sdp);
604
605 fail_ipreserv:
606 if (alloc_required)
607 gfs2_inplace_release(dip);
608
609 fail_quota_locks:
610 gfs2_quota_unlock(dip);
611
612 fail:
613 return error;
614 }
615
616 static int gfs2_initxattrs(struct inode *inode, const struct xattr *xattr_array,
617 void *fs_info)
618 {
619 const struct xattr *xattr;
620 int err = 0;
621
622 for (xattr = xattr_array; xattr->name != NULL; xattr++) {
623 err = __gfs2_xattr_set(inode, xattr->name, xattr->value,
624 xattr->value_len, 0,
625 GFS2_EATYPE_SECURITY);
626 if (err < 0)
627 break;
628 }
629 return err;
630 }
631
632 static int gfs2_security_init(struct gfs2_inode *dip, struct gfs2_inode *ip,
633 const struct qstr *qstr)
634 {
635 return security_inode_init_security(&ip->i_inode, &dip->i_inode, qstr,
636 &gfs2_initxattrs, NULL);
637 }
638
639 /**
640 * gfs2_create_inode - Create a new inode
641 * @dir: The parent directory
642 * @dentry: The new dentry
643 * @mode: The permissions on the new inode
644 * @dev: For device nodes, this is the device number
645 * @symname: For symlinks, this is the link destination
646 * @size: The initial size of the inode (ignored for directories)
647 *
648 * Returns: 0 on success, or error code
649 */
650
651 static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
652 umode_t mode, dev_t dev, const char *symname,
653 unsigned int size, int excl)
654 {
655 const struct qstr *name = &dentry->d_name;
656 struct gfs2_holder ghs[2];
657 struct inode *inode = NULL;
658 struct gfs2_inode *dip = GFS2_I(dir), *ip;
659 struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
660 struct gfs2_inum_host inum = { .no_addr = 0, .no_formal_ino = 0 };
661 int error;
662 u64 generation;
663 struct buffer_head *bh = NULL;
664
665 if (!name->len || name->len > GFS2_FNAMESIZE)
666 return -ENAMETOOLONG;
667
668 /* We need a reservation to allocate the new dinode block. The
669 directory ip temporarily points to the reservation, but this is
670 being done to get a set of contiguous blocks for the new dinode.
671 Since this is a create, we don't have a sizehint yet, so it will
672 have to use the minimum reservation size. */
673 error = gfs2_rs_alloc(dip);
674 if (error)
675 return error;
676
677 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
678 if (error)
679 goto fail;
680
681 error = create_ok(dip, name, mode);
682 if ((error == -EEXIST) && S_ISREG(mode) && !excl) {
683 inode = gfs2_lookupi(dir, &dentry->d_name, 0);
684 gfs2_glock_dq_uninit(ghs);
685 d_instantiate(dentry, inode);
686 return IS_ERR(inode) ? PTR_ERR(inode) : 0;
687 }
688 if (error)
689 goto fail_gunlock;
690
691 error = alloc_dinode(dip, &inum.no_addr, &generation);
692 if (error)
693 goto fail_gunlock;
694 inum.no_formal_ino = generation;
695
696 error = gfs2_glock_nq_num(sdp, inum.no_addr, &gfs2_inode_glops,
697 LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1);
698 if (error)
699 goto fail_gunlock;
700
701 error = make_dinode(dip, ghs[1].gh_gl, mode, &inum, &generation, dev, symname, size, &bh);
702 if (error)
703 goto fail_gunlock2;
704
705 inode = gfs2_inode_lookup(dir->i_sb, IF2DT(mode), inum.no_addr,
706 inum.no_formal_ino, 0);
707 if (IS_ERR(inode))
708 goto fail_gunlock2;
709
710 ip = GFS2_I(inode);
711 error = gfs2_inode_refresh(ip);
712 if (error)
713 goto fail_gunlock2;
714
715 /* The newly created inode needs a reservation so it can allocate
716 xattrs. At the same time, we want new blocks allocated to the new
717 dinode to be as contiguous as possible. Since we allocated the
718 dinode block under the directory's reservation, we transfer
719 ownership of that reservation to the new inode. The directory
720 doesn't need a reservation unless it needs a new allocation. */
721 ip->i_res = dip->i_res;
722 dip->i_res = NULL;
723
724 error = gfs2_acl_create(dip, inode);
725 if (error)
726 goto fail_gunlock2;
727
728 error = gfs2_security_init(dip, ip, name);
729 if (error)
730 goto fail_gunlock2;
731
732 error = link_dinode(dip, name, ip);
733 if (error)
734 goto fail_gunlock2;
735
736 if (bh)
737 brelse(bh);
738
739 gfs2_trans_end(sdp);
740 gfs2_inplace_release(dip);
741 gfs2_quota_unlock(dip);
742 mark_inode_dirty(inode);
743 gfs2_glock_dq_uninit_m(2, ghs);
744 d_instantiate(dentry, inode);
745 return 0;
746
747 fail_gunlock2:
748 gfs2_glock_dq_uninit(ghs + 1);
749 fail_gunlock:
750 gfs2_glock_dq_uninit(ghs);
751 if (inode && !IS_ERR(inode)) {
752 set_bit(GIF_ALLOC_FAILED, &GFS2_I(inode)->i_flags);
753 iput(inode);
754 }
755 fail:
756 gfs2_rs_delete(dip);
757 if (bh)
758 brelse(bh);
759 return error;
760 }
761
762 /**
763 * gfs2_create - Create a file
764 * @dir: The directory in which to create the file
765 * @dentry: The dentry of the new file
766 * @mode: The mode of the new file
767 *
768 * Returns: errno
769 */
770
771 static int gfs2_create(struct inode *dir, struct dentry *dentry,
772 umode_t mode, bool excl)
773 {
774 return gfs2_create_inode(dir, dentry, S_IFREG | mode, 0, NULL, 0, excl);
775 }
776
777 /**
778 * gfs2_lookup - Look up a filename in a directory and return its inode
779 * @dir: The directory inode
780 * @dentry: The dentry of the new inode
781 * @nd: passed from Linux VFS, ignored by us
782 *
783 * Called by the VFS layer. Lock dir and call gfs2_lookupi()
784 *
785 * Returns: errno
786 */
787
788 static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
789 unsigned int flags)
790 {
791 struct inode *inode = gfs2_lookupi(dir, &dentry->d_name, 0);
792 if (inode && !IS_ERR(inode)) {
793 struct gfs2_glock *gl = GFS2_I(inode)->i_gl;
794 struct gfs2_holder gh;
795 int error;
796 error = gfs2_glock_nq_init(gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
797 if (error) {
798 iput(inode);
799 return ERR_PTR(error);
800 }
801 gfs2_glock_dq_uninit(&gh);
802 }
803 return d_splice_alias(inode, dentry);
804 }
805
806 /**
807 * gfs2_link - Link to a file
808 * @old_dentry: The inode to link
809 * @dir: Add link to this directory
810 * @dentry: The name of the link
811 *
812 * Link the inode in "old_dentry" into the directory "dir" with the
813 * name in "dentry".
814 *
815 * Returns: errno
816 */
817
818 static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
819 struct dentry *dentry)
820 {
821 struct gfs2_inode *dip = GFS2_I(dir);
822 struct gfs2_sbd *sdp = GFS2_SB(dir);
823 struct inode *inode = old_dentry->d_inode;
824 struct gfs2_inode *ip = GFS2_I(inode);
825 struct gfs2_holder ghs[2];
826 struct buffer_head *dibh;
827 int alloc_required;
828 int error;
829
830 if (S_ISDIR(inode->i_mode))
831 return -EPERM;
832
833 error = gfs2_rs_alloc(dip);
834 if (error)
835 return error;
836
837 gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
838 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
839
840 error = gfs2_glock_nq(ghs); /* parent */
841 if (error)
842 goto out_parent;
843
844 error = gfs2_glock_nq(ghs + 1); /* child */
845 if (error)
846 goto out_child;
847
848 error = -ENOENT;
849 if (inode->i_nlink == 0)
850 goto out_gunlock;
851
852 error = gfs2_permission(dir, MAY_WRITE | MAY_EXEC);
853 if (error)
854 goto out_gunlock;
855
856 error = gfs2_dir_check(dir, &dentry->d_name, NULL);
857 switch (error) {
858 case -ENOENT:
859 break;
860 case 0:
861 error = -EEXIST;
862 default:
863 goto out_gunlock;
864 }
865
866 error = -EINVAL;
867 if (!dip->i_inode.i_nlink)
868 goto out_gunlock;
869 error = -EFBIG;
870 if (dip->i_entries == (u32)-1)
871 goto out_gunlock;
872 error = -EPERM;
873 if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
874 goto out_gunlock;
875 error = -EINVAL;
876 if (!ip->i_inode.i_nlink)
877 goto out_gunlock;
878 error = -EMLINK;
879 if (ip->i_inode.i_nlink == (u32)-1)
880 goto out_gunlock;
881
882 alloc_required = error = gfs2_diradd_alloc_required(dir, &dentry->d_name);
883 if (error < 0)
884 goto out_gunlock;
885 error = 0;
886
887 if (alloc_required) {
888 error = gfs2_quota_lock_check(dip);
889 if (error)
890 goto out_gunlock;
891
892 error = gfs2_inplace_reserve(dip, sdp->sd_max_dirres);
893 if (error)
894 goto out_gunlock_q;
895
896 error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
897 gfs2_rg_blocks(dip, sdp->sd_max_dirres) +
898 2 * RES_DINODE + RES_STATFS +
899 RES_QUOTA, 0);
900 if (error)
901 goto out_ipres;
902 } else {
903 error = gfs2_trans_begin(sdp, 2 * RES_DINODE + RES_LEAF, 0);
904 if (error)
905 goto out_ipres;
906 }
907
908 error = gfs2_meta_inode_buffer(ip, &dibh);
909 if (error)
910 goto out_end_trans;
911
912 error = gfs2_dir_add(dir, &dentry->d_name, ip);
913 if (error)
914 goto out_brelse;
915
916 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
917 inc_nlink(&ip->i_inode);
918 ip->i_inode.i_ctime = CURRENT_TIME;
919 ihold(inode);
920 d_instantiate(dentry, inode);
921 mark_inode_dirty(inode);
922
923 out_brelse:
924 brelse(dibh);
925 out_end_trans:
926 gfs2_trans_end(sdp);
927 out_ipres:
928 if (alloc_required)
929 gfs2_inplace_release(dip);
930 out_gunlock_q:
931 if (alloc_required)
932 gfs2_quota_unlock(dip);
933 out_gunlock:
934 gfs2_glock_dq(ghs + 1);
935 out_child:
936 gfs2_glock_dq(ghs);
937 out_parent:
938 gfs2_holder_uninit(ghs);
939 gfs2_holder_uninit(ghs + 1);
940 return error;
941 }
942
943 /*
944 * gfs2_unlink_ok - check to see that a inode is still in a directory
945 * @dip: the directory
946 * @name: the name of the file
947 * @ip: the inode
948 *
949 * Assumes that the lock on (at least) @dip is held.
950 *
951 * Returns: 0 if the parent/child relationship is correct, errno if it isn't
952 */
953
954 static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
955 const struct gfs2_inode *ip)
956 {
957 int error;
958
959 if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode))
960 return -EPERM;
961
962 if ((dip->i_inode.i_mode & S_ISVTX) &&
963 dip->i_inode.i_uid != current_fsuid() &&
964 ip->i_inode.i_uid != current_fsuid() && !capable(CAP_FOWNER))
965 return -EPERM;
966
967 if (IS_APPEND(&dip->i_inode))
968 return -EPERM;
969
970 error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC);
971 if (error)
972 return error;
973
974 error = gfs2_dir_check(&dip->i_inode, name, ip);
975 if (error)
976 return error;
977
978 return 0;
979 }
980
981 /**
982 * gfs2_unlink_inode - Removes an inode from its parent dir and unlinks it
983 * @dip: The parent directory
984 * @name: The name of the entry in the parent directory
985 * @bh: The inode buffer for the inode to be removed
986 * @inode: The inode to be removed
987 *
988 * Called with all the locks and in a transaction. This will only be
989 * called for a directory after it has been checked to ensure it is empty.
990 *
991 * Returns: 0 on success, or an error
992 */
993
994 static int gfs2_unlink_inode(struct gfs2_inode *dip,
995 const struct dentry *dentry,
996 struct buffer_head *bh)
997 {
998 struct inode *inode = dentry->d_inode;
999 struct gfs2_inode *ip = GFS2_I(inode);
1000 int error;
1001
1002 error = gfs2_dir_del(dip, dentry);
1003 if (error)
1004 return error;
1005
1006 ip->i_entries = 0;
1007 inode->i_ctime = CURRENT_TIME;
1008 if (S_ISDIR(inode->i_mode))
1009 clear_nlink(inode);
1010 else
1011 drop_nlink(inode);
1012 mark_inode_dirty(inode);
1013 if (inode->i_nlink == 0)
1014 gfs2_unlink_di(inode);
1015 return 0;
1016 }
1017
1018
1019 /**
1020 * gfs2_unlink - Unlink an inode (this does rmdir as well)
1021 * @dir: The inode of the directory containing the inode to unlink
1022 * @dentry: The file itself
1023 *
1024 * This routine uses the type of the inode as a flag to figure out
1025 * whether this is an unlink or an rmdir.
1026 *
1027 * Returns: errno
1028 */
1029
1030 static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
1031 {
1032 struct gfs2_inode *dip = GFS2_I(dir);
1033 struct gfs2_sbd *sdp = GFS2_SB(dir);
1034 struct inode *inode = dentry->d_inode;
1035 struct gfs2_inode *ip = GFS2_I(inode);
1036 struct buffer_head *bh;
1037 struct gfs2_holder ghs[3];
1038 struct gfs2_rgrpd *rgd;
1039 int error;
1040
1041 error = gfs2_rindex_update(sdp);
1042 if (error)
1043 return error;
1044
1045 error = -EROFS;
1046
1047 gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
1048 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
1049
1050 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1);
1051 if (!rgd)
1052 goto out_inodes;
1053
1054 gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2);
1055
1056
1057 error = gfs2_glock_nq(ghs); /* parent */
1058 if (error)
1059 goto out_parent;
1060
1061 error = gfs2_glock_nq(ghs + 1); /* child */
1062 if (error)
1063 goto out_child;
1064
1065 error = -ENOENT;
1066 if (inode->i_nlink == 0)
1067 goto out_rgrp;
1068
1069 if (S_ISDIR(inode->i_mode)) {
1070 error = -ENOTEMPTY;
1071 if (ip->i_entries > 2 || inode->i_nlink > 2)
1072 goto out_rgrp;
1073 }
1074
1075 error = gfs2_glock_nq(ghs + 2); /* rgrp */
1076 if (error)
1077 goto out_rgrp;
1078
1079 error = gfs2_unlink_ok(dip, &dentry->d_name, ip);
1080 if (error)
1081 goto out_gunlock;
1082
1083 error = gfs2_trans_begin(sdp, 2*RES_DINODE + 3*RES_LEAF + RES_RG_BIT, 0);
1084 if (error)
1085 goto out_gunlock;
1086
1087 error = gfs2_meta_inode_buffer(ip, &bh);
1088 if (error)
1089 goto out_end_trans;
1090
1091 error = gfs2_unlink_inode(dip, dentry, bh);
1092 brelse(bh);
1093
1094 out_end_trans:
1095 gfs2_trans_end(sdp);
1096 out_gunlock:
1097 gfs2_glock_dq(ghs + 2);
1098 out_rgrp:
1099 gfs2_glock_dq(ghs + 1);
1100 out_child:
1101 gfs2_glock_dq(ghs);
1102 out_parent:
1103 gfs2_holder_uninit(ghs + 2);
1104 out_inodes:
1105 gfs2_holder_uninit(ghs + 1);
1106 gfs2_holder_uninit(ghs);
1107 return error;
1108 }
1109
1110 /**
1111 * gfs2_symlink - Create a symlink
1112 * @dir: The directory to create the symlink in
1113 * @dentry: The dentry to put the symlink in
1114 * @symname: The thing which the link points to
1115 *
1116 * Returns: errno
1117 */
1118
1119 static int gfs2_symlink(struct inode *dir, struct dentry *dentry,
1120 const char *symname)
1121 {
1122 struct gfs2_sbd *sdp = GFS2_SB(dir);
1123 unsigned int size;
1124
1125 size = strlen(symname);
1126 if (size > sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode) - 1)
1127 return -ENAMETOOLONG;
1128
1129 return gfs2_create_inode(dir, dentry, S_IFLNK | S_IRWXUGO, 0, symname, size, 0);
1130 }
1131
1132 /**
1133 * gfs2_mkdir - Make a directory
1134 * @dir: The parent directory of the new one
1135 * @dentry: The dentry of the new directory
1136 * @mode: The mode of the new directory
1137 *
1138 * Returns: errno
1139 */
1140
1141 static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
1142 {
1143 return gfs2_create_inode(dir, dentry, S_IFDIR | mode, 0, NULL, 0, 0);
1144 }
1145
1146 /**
1147 * gfs2_mknod - Make a special file
1148 * @dir: The directory in which the special file will reside
1149 * @dentry: The dentry of the special file
1150 * @mode: The mode of the special file
1151 * @dev: The device specification of the special file
1152 *
1153 */
1154
1155 static int gfs2_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
1156 dev_t dev)
1157 {
1158 return gfs2_create_inode(dir, dentry, mode, dev, NULL, 0, 0);
1159 }
1160
1161 /*
1162 * gfs2_ok_to_move - check if it's ok to move a directory to another directory
1163 * @this: move this
1164 * @to: to here
1165 *
1166 * Follow @to back to the root and make sure we don't encounter @this
1167 * Assumes we already hold the rename lock.
1168 *
1169 * Returns: errno
1170 */
1171
1172 static int gfs2_ok_to_move(struct gfs2_inode *this, struct gfs2_inode *to)
1173 {
1174 struct inode *dir = &to->i_inode;
1175 struct super_block *sb = dir->i_sb;
1176 struct inode *tmp;
1177 int error = 0;
1178
1179 igrab(dir);
1180
1181 for (;;) {
1182 if (dir == &this->i_inode) {
1183 error = -EINVAL;
1184 break;
1185 }
1186 if (dir == sb->s_root->d_inode) {
1187 error = 0;
1188 break;
1189 }
1190
1191 tmp = gfs2_lookupi(dir, &gfs2_qdotdot, 1);
1192 if (IS_ERR(tmp)) {
1193 error = PTR_ERR(tmp);
1194 break;
1195 }
1196
1197 iput(dir);
1198 dir = tmp;
1199 }
1200
1201 iput(dir);
1202
1203 return error;
1204 }
1205
1206 /**
1207 * gfs2_rename - Rename a file
1208 * @odir: Parent directory of old file name
1209 * @odentry: The old dentry of the file
1210 * @ndir: Parent directory of new file name
1211 * @ndentry: The new dentry of the file
1212 *
1213 * Returns: errno
1214 */
1215
1216 static int gfs2_rename(struct inode *odir, struct dentry *odentry,
1217 struct inode *ndir, struct dentry *ndentry)
1218 {
1219 struct gfs2_inode *odip = GFS2_I(odir);
1220 struct gfs2_inode *ndip = GFS2_I(ndir);
1221 struct gfs2_inode *ip = GFS2_I(odentry->d_inode);
1222 struct gfs2_inode *nip = NULL;
1223 struct gfs2_sbd *sdp = GFS2_SB(odir);
1224 struct gfs2_holder ghs[5], r_gh = { .gh_gl = NULL, };
1225 struct gfs2_rgrpd *nrgd;
1226 unsigned int num_gh;
1227 int dir_rename = 0;
1228 int alloc_required = 0;
1229 unsigned int x;
1230 int error;
1231
1232 if (ndentry->d_inode) {
1233 nip = GFS2_I(ndentry->d_inode);
1234 if (ip == nip)
1235 return 0;
1236 }
1237
1238 error = gfs2_rindex_update(sdp);
1239 if (error)
1240 return error;
1241
1242 error = gfs2_rs_alloc(ndip);
1243 if (error)
1244 return error;
1245
1246 if (odip != ndip) {
1247 error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE,
1248 0, &r_gh);
1249 if (error)
1250 goto out;
1251
1252 if (S_ISDIR(ip->i_inode.i_mode)) {
1253 dir_rename = 1;
1254 /* don't move a dirctory into it's subdir */
1255 error = gfs2_ok_to_move(ip, ndip);
1256 if (error)
1257 goto out_gunlock_r;
1258 }
1259 }
1260
1261 num_gh = 1;
1262 gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
1263 if (odip != ndip) {
1264 gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1265 num_gh++;
1266 }
1267 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1268 num_gh++;
1269
1270 if (nip) {
1271 gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1272 num_gh++;
1273 /* grab the resource lock for unlink flag twiddling
1274 * this is the case of the target file already existing
1275 * so we unlink before doing the rename
1276 */
1277 nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr, 1);
1278 if (nrgd)
1279 gfs2_holder_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh++);
1280 }
1281
1282 for (x = 0; x < num_gh; x++) {
1283 error = gfs2_glock_nq(ghs + x);
1284 if (error)
1285 goto out_gunlock;
1286 }
1287
1288 error = -ENOENT;
1289 if (ip->i_inode.i_nlink == 0)
1290 goto out_gunlock;
1291
1292 /* Check out the old directory */
1293
1294 error = gfs2_unlink_ok(odip, &odentry->d_name, ip);
1295 if (error)
1296 goto out_gunlock;
1297
1298 /* Check out the new directory */
1299
1300 if (nip) {
1301 error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip);
1302 if (error)
1303 goto out_gunlock;
1304
1305 if (nip->i_inode.i_nlink == 0) {
1306 error = -EAGAIN;
1307 goto out_gunlock;
1308 }
1309
1310 if (S_ISDIR(nip->i_inode.i_mode)) {
1311 if (nip->i_entries < 2) {
1312 gfs2_consist_inode(nip);
1313 error = -EIO;
1314 goto out_gunlock;
1315 }
1316 if (nip->i_entries > 2) {
1317 error = -ENOTEMPTY;
1318 goto out_gunlock;
1319 }
1320 }
1321 } else {
1322 error = gfs2_permission(ndir, MAY_WRITE | MAY_EXEC);
1323 if (error)
1324 goto out_gunlock;
1325
1326 error = gfs2_dir_check(ndir, &ndentry->d_name, NULL);
1327 switch (error) {
1328 case -ENOENT:
1329 error = 0;
1330 break;
1331 case 0:
1332 error = -EEXIST;
1333 default:
1334 goto out_gunlock;
1335 };
1336
1337 if (odip != ndip) {
1338 if (!ndip->i_inode.i_nlink) {
1339 error = -ENOENT;
1340 goto out_gunlock;
1341 }
1342 if (ndip->i_entries == (u32)-1) {
1343 error = -EFBIG;
1344 goto out_gunlock;
1345 }
1346 if (S_ISDIR(ip->i_inode.i_mode) &&
1347 ndip->i_inode.i_nlink == (u32)-1) {
1348 error = -EMLINK;
1349 goto out_gunlock;
1350 }
1351 }
1352 }
1353
1354 /* Check out the dir to be renamed */
1355
1356 if (dir_rename) {
1357 error = gfs2_permission(odentry->d_inode, MAY_WRITE);
1358 if (error)
1359 goto out_gunlock;
1360 }
1361
1362 if (nip == NULL)
1363 alloc_required = gfs2_diradd_alloc_required(ndir, &ndentry->d_name);
1364 error = alloc_required;
1365 if (error < 0)
1366 goto out_gunlock;
1367
1368 if (alloc_required) {
1369 error = gfs2_quota_lock_check(ndip);
1370 if (error)
1371 goto out_gunlock;
1372
1373 error = gfs2_inplace_reserve(ndip, sdp->sd_max_dirres);
1374 if (error)
1375 goto out_gunlock_q;
1376
1377 error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
1378 gfs2_rg_blocks(ndip, sdp->sd_max_dirres) +
1379 4 * RES_DINODE + 4 * RES_LEAF +
1380 RES_STATFS + RES_QUOTA + 4, 0);
1381 if (error)
1382 goto out_ipreserv;
1383 } else {
1384 error = gfs2_trans_begin(sdp, 4 * RES_DINODE +
1385 5 * RES_LEAF + 4, 0);
1386 if (error)
1387 goto out_gunlock;
1388 }
1389
1390 /* Remove the target file, if it exists */
1391
1392 if (nip) {
1393 struct buffer_head *bh;
1394 error = gfs2_meta_inode_buffer(nip, &bh);
1395 if (error)
1396 goto out_end_trans;
1397 error = gfs2_unlink_inode(ndip, ndentry, bh);
1398 brelse(bh);
1399 }
1400
1401 if (dir_rename) {
1402 error = gfs2_dir_mvino(ip, &gfs2_qdotdot, ndip, DT_DIR);
1403 if (error)
1404 goto out_end_trans;
1405 } else {
1406 struct buffer_head *dibh;
1407 error = gfs2_meta_inode_buffer(ip, &dibh);
1408 if (error)
1409 goto out_end_trans;
1410 ip->i_inode.i_ctime = CURRENT_TIME;
1411 gfs2_trans_add_bh(ip->i_gl, dibh, 1);
1412 gfs2_dinode_out(ip, dibh->b_data);
1413 brelse(dibh);
1414 }
1415
1416 error = gfs2_dir_del(odip, odentry);
1417 if (error)
1418 goto out_end_trans;
1419
1420 error = gfs2_dir_add(ndir, &ndentry->d_name, ip);
1421 if (error)
1422 goto out_end_trans;
1423
1424 out_end_trans:
1425 gfs2_trans_end(sdp);
1426 out_ipreserv:
1427 if (alloc_required)
1428 gfs2_inplace_release(ndip);
1429 out_gunlock_q:
1430 if (alloc_required)
1431 gfs2_quota_unlock(ndip);
1432 out_gunlock:
1433 while (x--) {
1434 gfs2_glock_dq(ghs + x);
1435 gfs2_holder_uninit(ghs + x);
1436 }
1437 out_gunlock_r:
1438 if (r_gh.gh_gl)
1439 gfs2_glock_dq_uninit(&r_gh);
1440 out:
1441 return error;
1442 }
1443
1444 /**
1445 * gfs2_follow_link - Follow a symbolic link
1446 * @dentry: The dentry of the link
1447 * @nd: Data that we pass to vfs_follow_link()
1448 *
1449 * This can handle symlinks of any size.
1450 *
1451 * Returns: 0 on success or error code
1452 */
1453
1454 static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd)
1455 {
1456 struct gfs2_inode *ip = GFS2_I(dentry->d_inode);
1457 struct gfs2_holder i_gh;
1458 struct buffer_head *dibh;
1459 unsigned int size;
1460 char *buf;
1461 int error;
1462
1463 gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
1464 error = gfs2_glock_nq(&i_gh);
1465 if (error) {
1466 gfs2_holder_uninit(&i_gh);
1467 nd_set_link(nd, ERR_PTR(error));
1468 return NULL;
1469 }
1470
1471 size = (unsigned int)i_size_read(&ip->i_inode);
1472 if (size == 0) {
1473 gfs2_consist_inode(ip);
1474 buf = ERR_PTR(-EIO);
1475 goto out;
1476 }
1477
1478 error = gfs2_meta_inode_buffer(ip, &dibh);
1479 if (error) {
1480 buf = ERR_PTR(error);
1481 goto out;
1482 }
1483
1484 buf = kzalloc(size + 1, GFP_NOFS);
1485 if (!buf)
1486 buf = ERR_PTR(-ENOMEM);
1487 else
1488 memcpy(buf, dibh->b_data + sizeof(struct gfs2_dinode), size);
1489 brelse(dibh);
1490 out:
1491 gfs2_glock_dq_uninit(&i_gh);
1492 nd_set_link(nd, buf);
1493 return NULL;
1494 }
1495
1496 static void gfs2_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
1497 {
1498 char *s = nd_get_link(nd);
1499 if (!IS_ERR(s))
1500 kfree(s);
1501 }
1502
1503 /**
1504 * gfs2_permission -
1505 * @inode: The inode
1506 * @mask: The mask to be tested
1507 * @flags: Indicates whether this is an RCU path walk or not
1508 *
1509 * This may be called from the VFS directly, or from within GFS2 with the
1510 * inode locked, so we look to see if the glock is already locked and only
1511 * lock the glock if its not already been done.
1512 *
1513 * Returns: errno
1514 */
1515
1516 int gfs2_permission(struct inode *inode, int mask)
1517 {
1518 struct gfs2_inode *ip;
1519 struct gfs2_holder i_gh;
1520 int error;
1521 int unlock = 0;
1522
1523
1524 ip = GFS2_I(inode);
1525 if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
1526 if (mask & MAY_NOT_BLOCK)
1527 return -ECHILD;
1528 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
1529 if (error)
1530 return error;
1531 unlock = 1;
1532 }
1533
1534 if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
1535 error = -EACCES;
1536 else
1537 error = generic_permission(inode, mask);
1538 if (unlock)
1539 gfs2_glock_dq_uninit(&i_gh);
1540
1541 return error;
1542 }
1543
1544 static int __gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
1545 {
1546 setattr_copy(inode, attr);
1547 mark_inode_dirty(inode);
1548 return 0;
1549 }
1550
1551 /**
1552 * gfs2_setattr_simple -
1553 * @ip:
1554 * @attr:
1555 *
1556 * Returns: errno
1557 */
1558
1559 int gfs2_setattr_simple(struct inode *inode, struct iattr *attr)
1560 {
1561 int error;
1562
1563 if (current->journal_info)
1564 return __gfs2_setattr_simple(inode, attr);
1565
1566 error = gfs2_trans_begin(GFS2_SB(inode), RES_DINODE, 0);
1567 if (error)
1568 return error;
1569
1570 error = __gfs2_setattr_simple(inode, attr);
1571 gfs2_trans_end(GFS2_SB(inode));
1572 return error;
1573 }
1574
1575 static int setattr_chown(struct inode *inode, struct iattr *attr)
1576 {
1577 struct gfs2_inode *ip = GFS2_I(inode);
1578 struct gfs2_sbd *sdp = GFS2_SB(inode);
1579 u32 ouid, ogid, nuid, ngid;
1580 int error;
1581
1582 ouid = inode->i_uid;
1583 ogid = inode->i_gid;
1584 nuid = attr->ia_uid;
1585 ngid = attr->ia_gid;
1586
1587 if (!(attr->ia_valid & ATTR_UID) || ouid == nuid)
1588 ouid = nuid = NO_QUOTA_CHANGE;
1589 if (!(attr->ia_valid & ATTR_GID) || ogid == ngid)
1590 ogid = ngid = NO_QUOTA_CHANGE;
1591
1592 error = gfs2_quota_lock(ip, nuid, ngid);
1593 if (error)
1594 return error;
1595
1596 if (ouid != NO_QUOTA_CHANGE || ogid != NO_QUOTA_CHANGE) {
1597 error = gfs2_quota_check(ip, nuid, ngid);
1598 if (error)
1599 goto out_gunlock_q;
1600 }
1601
1602 error = gfs2_trans_begin(sdp, RES_DINODE + 2 * RES_QUOTA, 0);
1603 if (error)
1604 goto out_gunlock_q;
1605
1606 error = gfs2_setattr_simple(inode, attr);
1607 if (error)
1608 goto out_end_trans;
1609
1610 if (ouid != NO_QUOTA_CHANGE || ogid != NO_QUOTA_CHANGE) {
1611 u64 blocks = gfs2_get_inode_blocks(&ip->i_inode);
1612 gfs2_quota_change(ip, -blocks, ouid, ogid);
1613 gfs2_quota_change(ip, blocks, nuid, ngid);
1614 }
1615
1616 out_end_trans:
1617 gfs2_trans_end(sdp);
1618 out_gunlock_q:
1619 gfs2_quota_unlock(ip);
1620 return error;
1621 }
1622
1623 /**
1624 * gfs2_setattr - Change attributes on an inode
1625 * @dentry: The dentry which is changing
1626 * @attr: The structure describing the change
1627 *
1628 * The VFS layer wants to change one or more of an inodes attributes. Write
1629 * that change out to disk.
1630 *
1631 * Returns: errno
1632 */
1633
1634 static int gfs2_setattr(struct dentry *dentry, struct iattr *attr)
1635 {
1636 struct inode *inode = dentry->d_inode;
1637 struct gfs2_inode *ip = GFS2_I(inode);
1638 struct gfs2_holder i_gh;
1639 int error;
1640
1641 error = gfs2_rs_alloc(ip);
1642 if (error)
1643 return error;
1644
1645 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
1646 if (error)
1647 return error;
1648
1649 error = -EPERM;
1650 if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
1651 goto out;
1652
1653 error = inode_change_ok(inode, attr);
1654 if (error)
1655 goto out;
1656
1657 if (attr->ia_valid & ATTR_SIZE)
1658 error = gfs2_setattr_size(inode, attr->ia_size);
1659 else if (attr->ia_valid & (ATTR_UID | ATTR_GID))
1660 error = setattr_chown(inode, attr);
1661 else if ((attr->ia_valid & ATTR_MODE) && IS_POSIXACL(inode))
1662 error = gfs2_acl_chmod(ip, attr);
1663 else
1664 error = gfs2_setattr_simple(inode, attr);
1665
1666 out:
1667 if (!error)
1668 mark_inode_dirty(inode);
1669 gfs2_glock_dq_uninit(&i_gh);
1670 return error;
1671 }
1672
1673 /**
1674 * gfs2_getattr - Read out an inode's attributes
1675 * @mnt: The vfsmount the inode is being accessed from
1676 * @dentry: The dentry to stat
1677 * @stat: The inode's stats
1678 *
1679 * This may be called from the VFS directly, or from within GFS2 with the
1680 * inode locked, so we look to see if the glock is already locked and only
1681 * lock the glock if its not already been done. Note that its the NFS
1682 * readdirplus operation which causes this to be called (from filldir)
1683 * with the glock already held.
1684 *
1685 * Returns: errno
1686 */
1687
1688 static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
1689 struct kstat *stat)
1690 {
1691 struct inode *inode = dentry->d_inode;
1692 struct gfs2_inode *ip = GFS2_I(inode);
1693 struct gfs2_holder gh;
1694 int error;
1695 int unlock = 0;
1696
1697 if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
1698 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
1699 if (error)
1700 return error;
1701 unlock = 1;
1702 }
1703
1704 generic_fillattr(inode, stat);
1705 if (unlock)
1706 gfs2_glock_dq_uninit(&gh);
1707
1708 return 0;
1709 }
1710
1711 static int gfs2_setxattr(struct dentry *dentry, const char *name,
1712 const void *data, size_t size, int flags)
1713 {
1714 struct inode *inode = dentry->d_inode;
1715 struct gfs2_inode *ip = GFS2_I(inode);
1716 struct gfs2_holder gh;
1717 int ret;
1718
1719 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
1720 ret = gfs2_glock_nq(&gh);
1721 if (ret == 0) {
1722 ret = gfs2_rs_alloc(ip);
1723 if (ret == 0)
1724 ret = generic_setxattr(dentry, name, data, size, flags);
1725 gfs2_glock_dq(&gh);
1726 }
1727 gfs2_holder_uninit(&gh);
1728 return ret;
1729 }
1730
1731 static ssize_t gfs2_getxattr(struct dentry *dentry, const char *name,
1732 void *data, size_t size)
1733 {
1734 struct inode *inode = dentry->d_inode;
1735 struct gfs2_inode *ip = GFS2_I(inode);
1736 struct gfs2_holder gh;
1737 int ret;
1738
1739 gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
1740 ret = gfs2_glock_nq(&gh);
1741 if (ret == 0) {
1742 ret = generic_getxattr(dentry, name, data, size);
1743 gfs2_glock_dq(&gh);
1744 }
1745 gfs2_holder_uninit(&gh);
1746 return ret;
1747 }
1748
1749 static int gfs2_removexattr(struct dentry *dentry, const char *name)
1750 {
1751 struct inode *inode = dentry->d_inode;
1752 struct gfs2_inode *ip = GFS2_I(inode);
1753 struct gfs2_holder gh;
1754 int ret;
1755
1756 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
1757 ret = gfs2_glock_nq(&gh);
1758 if (ret == 0) {
1759 ret = gfs2_rs_alloc(ip);
1760 if (ret == 0)
1761 ret = generic_removexattr(dentry, name);
1762 gfs2_glock_dq(&gh);
1763 }
1764 gfs2_holder_uninit(&gh);
1765 return ret;
1766 }
1767
1768 static int gfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
1769 u64 start, u64 len)
1770 {
1771 struct gfs2_inode *ip = GFS2_I(inode);
1772 struct gfs2_holder gh;
1773 int ret;
1774
1775 ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC);
1776 if (ret)
1777 return ret;
1778
1779 mutex_lock(&inode->i_mutex);
1780
1781 ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
1782 if (ret)
1783 goto out;
1784
1785 if (gfs2_is_stuffed(ip)) {
1786 u64 phys = ip->i_no_addr << inode->i_blkbits;
1787 u64 size = i_size_read(inode);
1788 u32 flags = FIEMAP_EXTENT_LAST|FIEMAP_EXTENT_NOT_ALIGNED|
1789 FIEMAP_EXTENT_DATA_INLINE;
1790 phys += sizeof(struct gfs2_dinode);
1791 phys += start;
1792 if (start + len > size)
1793 len = size - start;
1794 if (start < size)
1795 ret = fiemap_fill_next_extent(fieinfo, start, phys,
1796 len, flags);
1797 if (ret == 1)
1798 ret = 0;
1799 } else {
1800 ret = __generic_block_fiemap(inode, fieinfo, start, len,
1801 gfs2_block_map);
1802 }
1803
1804 gfs2_glock_dq_uninit(&gh);
1805 out:
1806 mutex_unlock(&inode->i_mutex);
1807 return ret;
1808 }
1809
1810 const struct inode_operations gfs2_file_iops = {
1811 .permission = gfs2_permission,
1812 .setattr = gfs2_setattr,
1813 .getattr = gfs2_getattr,
1814 .setxattr = gfs2_setxattr,
1815 .getxattr = gfs2_getxattr,
1816 .listxattr = gfs2_listxattr,
1817 .removexattr = gfs2_removexattr,
1818 .fiemap = gfs2_fiemap,
1819 .get_acl = gfs2_get_acl,
1820 };
1821
1822 const struct inode_operations gfs2_dir_iops = {
1823 .create = gfs2_create,
1824 .lookup = gfs2_lookup,
1825 .link = gfs2_link,
1826 .unlink = gfs2_unlink,
1827 .symlink = gfs2_symlink,
1828 .mkdir = gfs2_mkdir,
1829 .rmdir = gfs2_unlink,
1830 .mknod = gfs2_mknod,
1831 .rename = gfs2_rename,
1832 .permission = gfs2_permission,
1833 .setattr = gfs2_setattr,
1834 .getattr = gfs2_getattr,
1835 .setxattr = gfs2_setxattr,
1836 .getxattr = gfs2_getxattr,
1837 .listxattr = gfs2_listxattr,
1838 .removexattr = gfs2_removexattr,
1839 .fiemap = gfs2_fiemap,
1840 .get_acl = gfs2_get_acl,
1841 };
1842
1843 const struct inode_operations gfs2_symlink_iops = {
1844 .readlink = generic_readlink,
1845 .follow_link = gfs2_follow_link,
1846 .put_link = gfs2_put_link,
1847 .permission = gfs2_permission,
1848 .setattr = gfs2_setattr,
1849 .getattr = gfs2_getattr,
1850 .setxattr = gfs2_setxattr,
1851 .getxattr = gfs2_getxattr,
1852 .listxattr = gfs2_listxattr,
1853 .removexattr = gfs2_removexattr,
1854 .fiemap = gfs2_fiemap,
1855 .get_acl = gfs2_get_acl,
1856 };
1857
This page took 0.112891 seconds and 6 git commands to generate.