This source file includes following definitions.
- gfs2_jindex_free
- jdesc_find_i
- gfs2_jdesc_find
- gfs2_jdesc_check
- init_threads
- gfs2_make_fs_rw
- gfs2_statfs_change_in
- gfs2_statfs_change_out
- gfs2_statfs_init
- gfs2_statfs_change
- update_statfs
- gfs2_statfs_sync
- gfs2_lock_fs_check_clean
- gfs2_dinode_out
- gfs2_write_inode
- gfs2_dirty_inode
- gfs2_make_fs_ro
- gfs2_put_super
- gfs2_sync_fs
- gfs2_freeze_func
- gfs2_freeze
- gfs2_unfreeze
- statfs_slow_fill
- gfs2_statfs_slow
- gfs2_statfs_i
- gfs2_statfs
- gfs2_drop_inode
- is_ancestor
- gfs2_show_options
- gfs2_final_release_pages
- gfs2_dinode_dealloc
- gfs2_glock_put_eventually
- gfs2_evict_inode
- gfs2_alloc_inode
- gfs2_free_inode
1
2
3
4
5
6
7 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
8
9 #include <linux/bio.h>
10 #include <linux/sched/signal.h>
11 #include <linux/slab.h>
12 #include <linux/spinlock.h>
13 #include <linux/completion.h>
14 #include <linux/buffer_head.h>
15 #include <linux/statfs.h>
16 #include <linux/seq_file.h>
17 #include <linux/mount.h>
18 #include <linux/kthread.h>
19 #include <linux/delay.h>
20 #include <linux/gfs2_ondisk.h>
21 #include <linux/crc32.h>
22 #include <linux/time.h>
23 #include <linux/wait.h>
24 #include <linux/writeback.h>
25 #include <linux/backing-dev.h>
26 #include <linux/kernel.h>
27
28 #include "gfs2.h"
29 #include "incore.h"
30 #include "bmap.h"
31 #include "dir.h"
32 #include "glock.h"
33 #include "glops.h"
34 #include "inode.h"
35 #include "log.h"
36 #include "meta_io.h"
37 #include "quota.h"
38 #include "recovery.h"
39 #include "rgrp.h"
40 #include "super.h"
41 #include "trans.h"
42 #include "util.h"
43 #include "sys.h"
44 #include "xattr.h"
45 #include "lops.h"
46
47
48
49
50
51
52
53 void gfs2_jindex_free(struct gfs2_sbd *sdp)
54 {
55 struct list_head list;
56 struct gfs2_jdesc *jd;
57
58 spin_lock(&sdp->sd_jindex_spin);
59 list_add(&list, &sdp->sd_jindex_list);
60 list_del_init(&sdp->sd_jindex_list);
61 sdp->sd_journals = 0;
62 spin_unlock(&sdp->sd_jindex_spin);
63
64 while (!list_empty(&list)) {
65 jd = list_entry(list.next, struct gfs2_jdesc, jd_list);
66 gfs2_free_journal_extents(jd);
67 list_del(&jd->jd_list);
68 iput(jd->jd_inode);
69 kfree(jd);
70 }
71 }
72
73 static struct gfs2_jdesc *jdesc_find_i(struct list_head *head, unsigned int jid)
74 {
75 struct gfs2_jdesc *jd;
76 int found = 0;
77
78 list_for_each_entry(jd, head, jd_list) {
79 if (jd->jd_jid == jid) {
80 found = 1;
81 break;
82 }
83 }
84
85 if (!found)
86 jd = NULL;
87
88 return jd;
89 }
90
91 struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid)
92 {
93 struct gfs2_jdesc *jd;
94
95 spin_lock(&sdp->sd_jindex_spin);
96 jd = jdesc_find_i(&sdp->sd_jindex_list, jid);
97 spin_unlock(&sdp->sd_jindex_spin);
98
99 return jd;
100 }
101
102 int gfs2_jdesc_check(struct gfs2_jdesc *jd)
103 {
104 struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
105 struct gfs2_sbd *sdp = GFS2_SB(jd->jd_inode);
106 u64 size = i_size_read(jd->jd_inode);
107
108 if (gfs2_check_internal_file_size(jd->jd_inode, 8 << 20, BIT(30)))
109 return -EIO;
110
111 jd->jd_blocks = size >> sdp->sd_sb.sb_bsize_shift;
112
113 if (gfs2_write_alloc_required(ip, 0, size)) {
114 gfs2_consist_inode(ip);
115 return -EIO;
116 }
117
118 return 0;
119 }
120
121 static int init_threads(struct gfs2_sbd *sdp)
122 {
123 struct task_struct *p;
124 int error = 0;
125
126 p = kthread_run(gfs2_logd, sdp, "gfs2_logd");
127 if (IS_ERR(p)) {
128 error = PTR_ERR(p);
129 fs_err(sdp, "can't start logd thread: %d\n", error);
130 return error;
131 }
132 sdp->sd_logd_process = p;
133
134 p = kthread_run(gfs2_quotad, sdp, "gfs2_quotad");
135 if (IS_ERR(p)) {
136 error = PTR_ERR(p);
137 fs_err(sdp, "can't start quotad thread: %d\n", error);
138 goto fail;
139 }
140 sdp->sd_quotad_process = p;
141 return 0;
142
143 fail:
144 kthread_stop(sdp->sd_logd_process);
145 sdp->sd_logd_process = NULL;
146 return error;
147 }
148
149
150
151
152
153
154
155
156 int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
157 {
158 struct gfs2_inode *ip = GFS2_I(sdp->sd_jdesc->jd_inode);
159 struct gfs2_glock *j_gl = ip->i_gl;
160 struct gfs2_holder freeze_gh;
161 struct gfs2_log_header_host head;
162 int error;
163
164 error = init_threads(sdp);
165 if (error)
166 return error;
167
168 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, 0,
169 &freeze_gh);
170 if (error)
171 goto fail_threads;
172
173 j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
174
175 error = gfs2_find_jhead(sdp->sd_jdesc, &head, false);
176 if (error)
177 goto fail;
178
179 if (!(head.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
180 gfs2_consist(sdp);
181 error = -EIO;
182 goto fail;
183 }
184
185
186 sdp->sd_log_sequence = head.lh_sequence + 1;
187 gfs2_log_pointers_init(sdp, head.lh_blkno);
188
189 error = gfs2_quota_init(sdp);
190 if (error)
191 goto fail;
192
193 set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
194
195 gfs2_glock_dq_uninit(&freeze_gh);
196
197 return 0;
198
199 fail:
200 freeze_gh.gh_flags |= GL_NOCACHE;
201 gfs2_glock_dq_uninit(&freeze_gh);
202 fail_threads:
203 if (sdp->sd_quotad_process)
204 kthread_stop(sdp->sd_quotad_process);
205 sdp->sd_quotad_process = NULL;
206 if (sdp->sd_logd_process)
207 kthread_stop(sdp->sd_logd_process);
208 sdp->sd_logd_process = NULL;
209 return error;
210 }
211
212 void gfs2_statfs_change_in(struct gfs2_statfs_change_host *sc, const void *buf)
213 {
214 const struct gfs2_statfs_change *str = buf;
215
216 sc->sc_total = be64_to_cpu(str->sc_total);
217 sc->sc_free = be64_to_cpu(str->sc_free);
218 sc->sc_dinodes = be64_to_cpu(str->sc_dinodes);
219 }
220
221 static void gfs2_statfs_change_out(const struct gfs2_statfs_change_host *sc, void *buf)
222 {
223 struct gfs2_statfs_change *str = buf;
224
225 str->sc_total = cpu_to_be64(sc->sc_total);
226 str->sc_free = cpu_to_be64(sc->sc_free);
227 str->sc_dinodes = cpu_to_be64(sc->sc_dinodes);
228 }
229
230 int gfs2_statfs_init(struct gfs2_sbd *sdp)
231 {
232 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
233 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
234 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
235 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
236 struct buffer_head *m_bh, *l_bh;
237 struct gfs2_holder gh;
238 int error;
239
240 error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
241 &gh);
242 if (error)
243 return error;
244
245 error = gfs2_meta_inode_buffer(m_ip, &m_bh);
246 if (error)
247 goto out;
248
249 if (sdp->sd_args.ar_spectator) {
250 spin_lock(&sdp->sd_statfs_spin);
251 gfs2_statfs_change_in(m_sc, m_bh->b_data +
252 sizeof(struct gfs2_dinode));
253 spin_unlock(&sdp->sd_statfs_spin);
254 } else {
255 error = gfs2_meta_inode_buffer(l_ip, &l_bh);
256 if (error)
257 goto out_m_bh;
258
259 spin_lock(&sdp->sd_statfs_spin);
260 gfs2_statfs_change_in(m_sc, m_bh->b_data +
261 sizeof(struct gfs2_dinode));
262 gfs2_statfs_change_in(l_sc, l_bh->b_data +
263 sizeof(struct gfs2_dinode));
264 spin_unlock(&sdp->sd_statfs_spin);
265
266 brelse(l_bh);
267 }
268
269 out_m_bh:
270 brelse(m_bh);
271 out:
272 gfs2_glock_dq_uninit(&gh);
273 return 0;
274 }
275
276 void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free,
277 s64 dinodes)
278 {
279 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
280 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
281 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
282 struct buffer_head *l_bh;
283 s64 x, y;
284 int need_sync = 0;
285 int error;
286
287 error = gfs2_meta_inode_buffer(l_ip, &l_bh);
288 if (error)
289 return;
290
291 gfs2_trans_add_meta(l_ip->i_gl, l_bh);
292
293 spin_lock(&sdp->sd_statfs_spin);
294 l_sc->sc_total += total;
295 l_sc->sc_free += free;
296 l_sc->sc_dinodes += dinodes;
297 gfs2_statfs_change_out(l_sc, l_bh->b_data + sizeof(struct gfs2_dinode));
298 if (sdp->sd_args.ar_statfs_percent) {
299 x = 100 * l_sc->sc_free;
300 y = m_sc->sc_free * sdp->sd_args.ar_statfs_percent;
301 if (x >= y || x <= -y)
302 need_sync = 1;
303 }
304 spin_unlock(&sdp->sd_statfs_spin);
305
306 brelse(l_bh);
307 if (need_sync)
308 gfs2_wake_up_statfs(sdp);
309 }
310
311 void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh,
312 struct buffer_head *l_bh)
313 {
314 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
315 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
316 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
317 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
318
319 gfs2_trans_add_meta(l_ip->i_gl, l_bh);
320 gfs2_trans_add_meta(m_ip->i_gl, m_bh);
321
322 spin_lock(&sdp->sd_statfs_spin);
323 m_sc->sc_total += l_sc->sc_total;
324 m_sc->sc_free += l_sc->sc_free;
325 m_sc->sc_dinodes += l_sc->sc_dinodes;
326 memset(l_sc, 0, sizeof(struct gfs2_statfs_change));
327 memset(l_bh->b_data + sizeof(struct gfs2_dinode),
328 0, sizeof(struct gfs2_statfs_change));
329 gfs2_statfs_change_out(m_sc, m_bh->b_data + sizeof(struct gfs2_dinode));
330 spin_unlock(&sdp->sd_statfs_spin);
331 }
332
333 int gfs2_statfs_sync(struct super_block *sb, int type)
334 {
335 struct gfs2_sbd *sdp = sb->s_fs_info;
336 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
337 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
338 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
339 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
340 struct gfs2_holder gh;
341 struct buffer_head *m_bh, *l_bh;
342 int error;
343
344 sb_start_write(sb);
345 error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
346 &gh);
347 if (error)
348 goto out;
349
350 error = gfs2_meta_inode_buffer(m_ip, &m_bh);
351 if (error)
352 goto out_unlock;
353
354 spin_lock(&sdp->sd_statfs_spin);
355 gfs2_statfs_change_in(m_sc, m_bh->b_data +
356 sizeof(struct gfs2_dinode));
357 if (!l_sc->sc_total && !l_sc->sc_free && !l_sc->sc_dinodes) {
358 spin_unlock(&sdp->sd_statfs_spin);
359 goto out_bh;
360 }
361 spin_unlock(&sdp->sd_statfs_spin);
362
363 error = gfs2_meta_inode_buffer(l_ip, &l_bh);
364 if (error)
365 goto out_bh;
366
367 error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0);
368 if (error)
369 goto out_bh2;
370
371 update_statfs(sdp, m_bh, l_bh);
372 sdp->sd_statfs_force_sync = 0;
373
374 gfs2_trans_end(sdp);
375
376 out_bh2:
377 brelse(l_bh);
378 out_bh:
379 brelse(m_bh);
380 out_unlock:
381 gfs2_glock_dq_uninit(&gh);
382 out:
383 sb_end_write(sb);
384 return error;
385 }
386
387 struct lfcc {
388 struct list_head list;
389 struct gfs2_holder gh;
390 };
391
392
393
394
395
396
397
398
399
400
401
402 static int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp,
403 struct gfs2_holder *freeze_gh)
404 {
405 struct gfs2_inode *ip;
406 struct gfs2_jdesc *jd;
407 struct lfcc *lfcc;
408 LIST_HEAD(list);
409 struct gfs2_log_header_host lh;
410 int error;
411
412 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
413 lfcc = kmalloc(sizeof(struct lfcc), GFP_KERNEL);
414 if (!lfcc) {
415 error = -ENOMEM;
416 goto out;
417 }
418 ip = GFS2_I(jd->jd_inode);
419 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &lfcc->gh);
420 if (error) {
421 kfree(lfcc);
422 goto out;
423 }
424 list_add(&lfcc->list, &list);
425 }
426
427 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_EXCLUSIVE,
428 GL_NOCACHE, freeze_gh);
429
430 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
431 error = gfs2_jdesc_check(jd);
432 if (error)
433 break;
434 error = gfs2_find_jhead(jd, &lh, false);
435 if (error)
436 break;
437 if (!(lh.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
438 error = -EBUSY;
439 break;
440 }
441 }
442
443 if (error)
444 gfs2_glock_dq_uninit(freeze_gh);
445
446 out:
447 while (!list_empty(&list)) {
448 lfcc = list_entry(list.next, struct lfcc, list);
449 list_del(&lfcc->list);
450 gfs2_glock_dq_uninit(&lfcc->gh);
451 kfree(lfcc);
452 }
453 return error;
454 }
455
456 void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf)
457 {
458 struct gfs2_dinode *str = buf;
459
460 str->di_header.mh_magic = cpu_to_be32(GFS2_MAGIC);
461 str->di_header.mh_type = cpu_to_be32(GFS2_METATYPE_DI);
462 str->di_header.mh_format = cpu_to_be32(GFS2_FORMAT_DI);
463 str->di_num.no_addr = cpu_to_be64(ip->i_no_addr);
464 str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
465 str->di_mode = cpu_to_be32(ip->i_inode.i_mode);
466 str->di_uid = cpu_to_be32(i_uid_read(&ip->i_inode));
467 str->di_gid = cpu_to_be32(i_gid_read(&ip->i_inode));
468 str->di_nlink = cpu_to_be32(ip->i_inode.i_nlink);
469 str->di_size = cpu_to_be64(i_size_read(&ip->i_inode));
470 str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode));
471 str->di_atime = cpu_to_be64(ip->i_inode.i_atime.tv_sec);
472 str->di_mtime = cpu_to_be64(ip->i_inode.i_mtime.tv_sec);
473 str->di_ctime = cpu_to_be64(ip->i_inode.i_ctime.tv_sec);
474
475 str->di_goal_meta = cpu_to_be64(ip->i_goal);
476 str->di_goal_data = cpu_to_be64(ip->i_goal);
477 str->di_generation = cpu_to_be64(ip->i_generation);
478
479 str->di_flags = cpu_to_be32(ip->i_diskflags);
480 str->di_height = cpu_to_be16(ip->i_height);
481 str->di_payload_format = cpu_to_be32(S_ISDIR(ip->i_inode.i_mode) &&
482 !(ip->i_diskflags & GFS2_DIF_EXHASH) ?
483 GFS2_FORMAT_DE : 0);
484 str->di_depth = cpu_to_be16(ip->i_depth);
485 str->di_entries = cpu_to_be32(ip->i_entries);
486
487 str->di_eattr = cpu_to_be64(ip->i_eattr);
488 str->di_atime_nsec = cpu_to_be32(ip->i_inode.i_atime.tv_nsec);
489 str->di_mtime_nsec = cpu_to_be32(ip->i_inode.i_mtime.tv_nsec);
490 str->di_ctime_nsec = cpu_to_be32(ip->i_inode.i_ctime.tv_nsec);
491 }
492
493
494
495
496
497
498
499
500
501 static int gfs2_write_inode(struct inode *inode, struct writeback_control *wbc)
502 {
503 struct gfs2_inode *ip = GFS2_I(inode);
504 struct gfs2_sbd *sdp = GFS2_SB(inode);
505 struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl);
506 struct backing_dev_info *bdi = inode_to_bdi(metamapping->host);
507 int ret = 0;
508 bool flush_all = (wbc->sync_mode == WB_SYNC_ALL || gfs2_is_jdata(ip));
509
510 if (flush_all)
511 gfs2_log_flush(GFS2_SB(inode), ip->i_gl,
512 GFS2_LOG_HEAD_FLUSH_NORMAL |
513 GFS2_LFC_WRITE_INODE);
514 if (bdi->wb.dirty_exceeded)
515 gfs2_ail1_flush(sdp, wbc);
516 else
517 filemap_fdatawrite(metamapping);
518 if (flush_all)
519 ret = filemap_fdatawait(metamapping);
520 if (ret)
521 mark_inode_dirty_sync(inode);
522 else {
523 spin_lock(&inode->i_lock);
524 if (!(inode->i_flags & I_DIRTY))
525 gfs2_ordered_del_inode(ip);
526 spin_unlock(&inode->i_lock);
527 }
528 return ret;
529 }
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544 static void gfs2_dirty_inode(struct inode *inode, int flags)
545 {
546 struct gfs2_inode *ip = GFS2_I(inode);
547 struct gfs2_sbd *sdp = GFS2_SB(inode);
548 struct buffer_head *bh;
549 struct gfs2_holder gh;
550 int need_unlock = 0;
551 int need_endtrans = 0;
552 int ret;
553
554 if (!(flags & I_DIRTY_INODE))
555 return;
556 if (unlikely(test_bit(SDF_WITHDRAWN, &sdp->sd_flags)))
557 return;
558 if (!gfs2_glock_is_locked_by_me(ip->i_gl)) {
559 ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
560 if (ret) {
561 fs_err(sdp, "dirty_inode: glock %d\n", ret);
562 return;
563 }
564 need_unlock = 1;
565 } else if (WARN_ON_ONCE(ip->i_gl->gl_state != LM_ST_EXCLUSIVE))
566 return;
567
568 if (current->journal_info == NULL) {
569 ret = gfs2_trans_begin(sdp, RES_DINODE, 0);
570 if (ret) {
571 fs_err(sdp, "dirty_inode: gfs2_trans_begin %d\n", ret);
572 goto out;
573 }
574 need_endtrans = 1;
575 }
576
577 ret = gfs2_meta_inode_buffer(ip, &bh);
578 if (ret == 0) {
579 gfs2_trans_add_meta(ip->i_gl, bh);
580 gfs2_dinode_out(ip, bh->b_data);
581 brelse(bh);
582 }
583
584 if (need_endtrans)
585 gfs2_trans_end(sdp);
586 out:
587 if (need_unlock)
588 gfs2_glock_dq_uninit(&gh);
589 }
590
591
592
593
594
595
596
597
598 int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
599 {
600 struct gfs2_holder freeze_gh;
601 int error;
602
603 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, GL_NOCACHE,
604 &freeze_gh);
605 if (error && !test_bit(SDF_WITHDRAWN, &sdp->sd_flags))
606 return error;
607
608 flush_workqueue(gfs2_delete_workqueue);
609 if (sdp->sd_quotad_process)
610 kthread_stop(sdp->sd_quotad_process);
611 sdp->sd_quotad_process = NULL;
612 if (sdp->sd_logd_process)
613 kthread_stop(sdp->sd_logd_process);
614 sdp->sd_logd_process = NULL;
615
616 gfs2_quota_sync(sdp->sd_vfs, 0);
617 gfs2_statfs_sync(sdp->sd_vfs, 0);
618
619 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_SHUTDOWN |
620 GFS2_LFC_MAKE_FS_RO);
621 wait_event(sdp->sd_reserving_log_wait, atomic_read(&sdp->sd_reserving_log) == 0);
622 gfs2_assert_warn(sdp, atomic_read(&sdp->sd_log_blks_free) == sdp->sd_jdesc->jd_blocks);
623
624 if (gfs2_holder_initialized(&freeze_gh))
625 gfs2_glock_dq_uninit(&freeze_gh);
626
627 gfs2_quota_cleanup(sdp);
628
629 return error;
630 }
631
632
633
634
635
636
637
638 static void gfs2_put_super(struct super_block *sb)
639 {
640 struct gfs2_sbd *sdp = sb->s_fs_info;
641 int error;
642 struct gfs2_jdesc *jd;
643
644
645 set_bit(SDF_NORECOVERY, &sdp->sd_flags);
646 smp_mb();
647
648
649 restart:
650 spin_lock(&sdp->sd_jindex_spin);
651 list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
652 if (!test_bit(JDF_RECOVERY, &jd->jd_flags))
653 continue;
654 spin_unlock(&sdp->sd_jindex_spin);
655 wait_on_bit(&jd->jd_flags, JDF_RECOVERY,
656 TASK_UNINTERRUPTIBLE);
657 goto restart;
658 }
659 spin_unlock(&sdp->sd_jindex_spin);
660
661 if (!sb_rdonly(sb)) {
662 error = gfs2_make_fs_ro(sdp);
663 if (error)
664 gfs2_io_error(sdp);
665 }
666
667
668
669
670 iput(sdp->sd_jindex);
671 iput(sdp->sd_statfs_inode);
672 iput(sdp->sd_rindex);
673 iput(sdp->sd_quota_inode);
674
675 gfs2_glock_put(sdp->sd_rename_gl);
676 gfs2_glock_put(sdp->sd_freeze_gl);
677
678 if (!sdp->sd_args.ar_spectator) {
679 gfs2_glock_dq_uninit(&sdp->sd_journal_gh);
680 gfs2_glock_dq_uninit(&sdp->sd_jinode_gh);
681 gfs2_glock_dq_uninit(&sdp->sd_sc_gh);
682 gfs2_glock_dq_uninit(&sdp->sd_qc_gh);
683 iput(sdp->sd_sc_inode);
684 iput(sdp->sd_qc_inode);
685 }
686
687 gfs2_glock_dq_uninit(&sdp->sd_live_gh);
688 gfs2_clear_rgrpd(sdp);
689 gfs2_jindex_free(sdp);
690
691 gfs2_gl_hash_clear(sdp);
692 gfs2_delete_debugfs_file(sdp);
693
694 gfs2_lm_unmount(sdp);
695
696
697 gfs2_sys_fs_del(sdp);
698 }
699
700
701
702
703
704
705
706
707 static int gfs2_sync_fs(struct super_block *sb, int wait)
708 {
709 struct gfs2_sbd *sdp = sb->s_fs_info;
710
711 gfs2_quota_sync(sb, -1);
712 if (wait)
713 gfs2_log_flush(sdp, NULL, GFS2_LOG_HEAD_FLUSH_NORMAL |
714 GFS2_LFC_SYNC_FS);
715 return sdp->sd_log_error;
716 }
717
718 void gfs2_freeze_func(struct work_struct *work)
719 {
720 int error;
721 struct gfs2_holder freeze_gh;
722 struct gfs2_sbd *sdp = container_of(work, struct gfs2_sbd, sd_freeze_work);
723 struct super_block *sb = sdp->sd_vfs;
724
725 atomic_inc(&sb->s_active);
726 error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED, 0,
727 &freeze_gh);
728 if (error) {
729 fs_info(sdp, "GFS2: couldn't get freeze lock : %d\n", error);
730 gfs2_assert_withdraw(sdp, 0);
731 } else {
732 atomic_set(&sdp->sd_freeze_state, SFS_UNFROZEN);
733 error = thaw_super(sb);
734 if (error) {
735 fs_info(sdp, "GFS2: couldn't thaw filesystem: %d\n",
736 error);
737 gfs2_assert_withdraw(sdp, 0);
738 }
739 if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))
740 freeze_gh.gh_flags |= GL_NOCACHE;
741 gfs2_glock_dq_uninit(&freeze_gh);
742 }
743 deactivate_super(sb);
744 clear_bit_unlock(SDF_FS_FROZEN, &sdp->sd_flags);
745 wake_up_bit(&sdp->sd_flags, SDF_FS_FROZEN);
746 return;
747 }
748
749
750
751
752
753
754
755 static int gfs2_freeze(struct super_block *sb)
756 {
757 struct gfs2_sbd *sdp = sb->s_fs_info;
758 int error = 0;
759
760 mutex_lock(&sdp->sd_freeze_mutex);
761 if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN)
762 goto out;
763
764 if (test_bit(SDF_WITHDRAWN, &sdp->sd_flags)) {
765 error = -EINVAL;
766 goto out;
767 }
768
769 for (;;) {
770 error = gfs2_lock_fs_check_clean(sdp, &sdp->sd_freeze_gh);
771 if (!error)
772 break;
773
774 if (error == -EBUSY)
775 fs_err(sdp, "waiting for recovery before freeze\n");
776 else
777 fs_err(sdp, "error freezing FS: %d\n", error);
778
779 fs_err(sdp, "retrying...\n");
780 msleep(1000);
781 }
782 set_bit(SDF_FS_FROZEN, &sdp->sd_flags);
783 out:
784 mutex_unlock(&sdp->sd_freeze_mutex);
785 return error;
786 }
787
788
789
790
791
792
793
794 static int gfs2_unfreeze(struct super_block *sb)
795 {
796 struct gfs2_sbd *sdp = sb->s_fs_info;
797
798 mutex_lock(&sdp->sd_freeze_mutex);
799 if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN ||
800 !gfs2_holder_initialized(&sdp->sd_freeze_gh)) {
801 mutex_unlock(&sdp->sd_freeze_mutex);
802 return 0;
803 }
804
805 gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
806 mutex_unlock(&sdp->sd_freeze_mutex);
807 return wait_on_bit(&sdp->sd_flags, SDF_FS_FROZEN, TASK_INTERRUPTIBLE);
808 }
809
810
811
812
813
814
815
816
817
818 static int statfs_slow_fill(struct gfs2_rgrpd *rgd,
819 struct gfs2_statfs_change_host *sc)
820 {
821 gfs2_rgrp_verify(rgd);
822 sc->sc_total += rgd->rd_data;
823 sc->sc_free += rgd->rd_free;
824 sc->sc_dinodes += rgd->rd_dinodes;
825 return 0;
826 }
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841 static int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
842 {
843 struct gfs2_rgrpd *rgd_next;
844 struct gfs2_holder *gha, *gh;
845 unsigned int slots = 64;
846 unsigned int x;
847 int done;
848 int error = 0, err;
849
850 memset(sc, 0, sizeof(struct gfs2_statfs_change_host));
851 gha = kmalloc_array(slots, sizeof(struct gfs2_holder), GFP_KERNEL);
852 if (!gha)
853 return -ENOMEM;
854 for (x = 0; x < slots; x++)
855 gfs2_holder_mark_uninitialized(gha + x);
856
857 rgd_next = gfs2_rgrpd_get_first(sdp);
858
859 for (;;) {
860 done = 1;
861
862 for (x = 0; x < slots; x++) {
863 gh = gha + x;
864
865 if (gfs2_holder_initialized(gh) && gfs2_glock_poll(gh)) {
866 err = gfs2_glock_wait(gh);
867 if (err) {
868 gfs2_holder_uninit(gh);
869 error = err;
870 } else {
871 if (!error) {
872 struct gfs2_rgrpd *rgd =
873 gfs2_glock2rgrp(gh->gh_gl);
874
875 error = statfs_slow_fill(rgd, sc);
876 }
877 gfs2_glock_dq_uninit(gh);
878 }
879 }
880
881 if (gfs2_holder_initialized(gh))
882 done = 0;
883 else if (rgd_next && !error) {
884 error = gfs2_glock_nq_init(rgd_next->rd_gl,
885 LM_ST_SHARED,
886 GL_ASYNC,
887 gh);
888 rgd_next = gfs2_rgrpd_get_next(rgd_next);
889 done = 0;
890 }
891
892 if (signal_pending(current))
893 error = -ERESTARTSYS;
894 }
895
896 if (done)
897 break;
898
899 yield();
900 }
901
902 kfree(gha);
903 return error;
904 }
905
906
907
908
909
910
911
912
913
914 static int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
915 {
916 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
917 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
918
919 spin_lock(&sdp->sd_statfs_spin);
920
921 *sc = *m_sc;
922 sc->sc_total += l_sc->sc_total;
923 sc->sc_free += l_sc->sc_free;
924 sc->sc_dinodes += l_sc->sc_dinodes;
925
926 spin_unlock(&sdp->sd_statfs_spin);
927
928 if (sc->sc_free < 0)
929 sc->sc_free = 0;
930 if (sc->sc_free > sc->sc_total)
931 sc->sc_free = sc->sc_total;
932 if (sc->sc_dinodes < 0)
933 sc->sc_dinodes = 0;
934
935 return 0;
936 }
937
938
939
940
941
942
943
944
945
946 static int gfs2_statfs(struct dentry *dentry, struct kstatfs *buf)
947 {
948 struct super_block *sb = dentry->d_sb;
949 struct gfs2_sbd *sdp = sb->s_fs_info;
950 struct gfs2_statfs_change_host sc;
951 int error;
952
953 error = gfs2_rindex_update(sdp);
954 if (error)
955 return error;
956
957 if (gfs2_tune_get(sdp, gt_statfs_slow))
958 error = gfs2_statfs_slow(sdp, &sc);
959 else
960 error = gfs2_statfs_i(sdp, &sc);
961
962 if (error)
963 return error;
964
965 buf->f_type = GFS2_MAGIC;
966 buf->f_bsize = sdp->sd_sb.sb_bsize;
967 buf->f_blocks = sc.sc_total;
968 buf->f_bfree = sc.sc_free;
969 buf->f_bavail = sc.sc_free;
970 buf->f_files = sc.sc_dinodes + sc.sc_free;
971 buf->f_ffree = sc.sc_free;
972 buf->f_namelen = GFS2_FNAMESIZE;
973
974 return 0;
975 }
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992 static int gfs2_drop_inode(struct inode *inode)
993 {
994 struct gfs2_inode *ip = GFS2_I(inode);
995
996 if (!test_bit(GIF_FREE_VFS_INODE, &ip->i_flags) &&
997 inode->i_nlink &&
998 gfs2_holder_initialized(&ip->i_iopen_gh)) {
999 struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl;
1000 if (test_bit(GLF_DEMOTE, &gl->gl_flags))
1001 clear_nlink(inode);
1002 }
1003
1004
1005
1006
1007
1008
1009 if (!inode->i_nlink &&
1010 unlikely(current->flags & PF_MEMALLOC) &&
1011 gfs2_holder_initialized(&ip->i_iopen_gh)) {
1012 struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl;
1013
1014 gfs2_glock_hold(gl);
1015 if (queue_work(gfs2_delete_workqueue, &gl->gl_delete) == 0)
1016 gfs2_glock_queue_put(gl);
1017 return false;
1018 }
1019
1020 return generic_drop_inode(inode);
1021 }
1022
1023 static int is_ancestor(const struct dentry *d1, const struct dentry *d2)
1024 {
1025 do {
1026 if (d1 == d2)
1027 return 1;
1028 d1 = d1->d_parent;
1029 } while (!IS_ROOT(d1));
1030 return 0;
1031 }
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041 static int gfs2_show_options(struct seq_file *s, struct dentry *root)
1042 {
1043 struct gfs2_sbd *sdp = root->d_sb->s_fs_info;
1044 struct gfs2_args *args = &sdp->sd_args;
1045 int val;
1046
1047 if (is_ancestor(root, sdp->sd_master_dir))
1048 seq_puts(s, ",meta");
1049 if (args->ar_lockproto[0])
1050 seq_show_option(s, "lockproto", args->ar_lockproto);
1051 if (args->ar_locktable[0])
1052 seq_show_option(s, "locktable", args->ar_locktable);
1053 if (args->ar_hostdata[0])
1054 seq_show_option(s, "hostdata", args->ar_hostdata);
1055 if (args->ar_spectator)
1056 seq_puts(s, ",spectator");
1057 if (args->ar_localflocks)
1058 seq_puts(s, ",localflocks");
1059 if (args->ar_debug)
1060 seq_puts(s, ",debug");
1061 if (args->ar_posix_acl)
1062 seq_puts(s, ",acl");
1063 if (args->ar_quota != GFS2_QUOTA_DEFAULT) {
1064 char *state;
1065 switch (args->ar_quota) {
1066 case GFS2_QUOTA_OFF:
1067 state = "off";
1068 break;
1069 case GFS2_QUOTA_ACCOUNT:
1070 state = "account";
1071 break;
1072 case GFS2_QUOTA_ON:
1073 state = "on";
1074 break;
1075 default:
1076 state = "unknown";
1077 break;
1078 }
1079 seq_printf(s, ",quota=%s", state);
1080 }
1081 if (args->ar_suiddir)
1082 seq_puts(s, ",suiddir");
1083 if (args->ar_data != GFS2_DATA_DEFAULT) {
1084 char *state;
1085 switch (args->ar_data) {
1086 case GFS2_DATA_WRITEBACK:
1087 state = "writeback";
1088 break;
1089 case GFS2_DATA_ORDERED:
1090 state = "ordered";
1091 break;
1092 default:
1093 state = "unknown";
1094 break;
1095 }
1096 seq_printf(s, ",data=%s", state);
1097 }
1098 if (args->ar_discard)
1099 seq_puts(s, ",discard");
1100 val = sdp->sd_tune.gt_logd_secs;
1101 if (val != 30)
1102 seq_printf(s, ",commit=%d", val);
1103 val = sdp->sd_tune.gt_statfs_quantum;
1104 if (val != 30)
1105 seq_printf(s, ",statfs_quantum=%d", val);
1106 else if (sdp->sd_tune.gt_statfs_slow)
1107 seq_puts(s, ",statfs_quantum=0");
1108 val = sdp->sd_tune.gt_quota_quantum;
1109 if (val != 60)
1110 seq_printf(s, ",quota_quantum=%d", val);
1111 if (args->ar_statfs_percent)
1112 seq_printf(s, ",statfs_percent=%d", args->ar_statfs_percent);
1113 if (args->ar_errors != GFS2_ERRORS_DEFAULT) {
1114 const char *state;
1115
1116 switch (args->ar_errors) {
1117 case GFS2_ERRORS_WITHDRAW:
1118 state = "withdraw";
1119 break;
1120 case GFS2_ERRORS_PANIC:
1121 state = "panic";
1122 break;
1123 default:
1124 state = "unknown";
1125 break;
1126 }
1127 seq_printf(s, ",errors=%s", state);
1128 }
1129 if (test_bit(SDF_NOBARRIERS, &sdp->sd_flags))
1130 seq_puts(s, ",nobarrier");
1131 if (test_bit(SDF_DEMOTE, &sdp->sd_flags))
1132 seq_puts(s, ",demote_interface_used");
1133 if (args->ar_rgrplvb)
1134 seq_puts(s, ",rgrplvb");
1135 if (args->ar_loccookie)
1136 seq_puts(s, ",loccookie");
1137 return 0;
1138 }
1139
1140 static void gfs2_final_release_pages(struct gfs2_inode *ip)
1141 {
1142 struct inode *inode = &ip->i_inode;
1143 struct gfs2_glock *gl = ip->i_gl;
1144
1145 truncate_inode_pages(gfs2_glock2aspace(ip->i_gl), 0);
1146 truncate_inode_pages(&inode->i_data, 0);
1147
1148 if (atomic_read(&gl->gl_revokes) == 0) {
1149 clear_bit(GLF_LFLUSH, &gl->gl_flags);
1150 clear_bit(GLF_DIRTY, &gl->gl_flags);
1151 }
1152 }
1153
1154 static int gfs2_dinode_dealloc(struct gfs2_inode *ip)
1155 {
1156 struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
1157 struct gfs2_rgrpd *rgd;
1158 struct gfs2_holder gh;
1159 int error;
1160
1161 if (gfs2_get_inode_blocks(&ip->i_inode) != 1) {
1162 gfs2_consist_inode(ip);
1163 return -EIO;
1164 }
1165
1166 error = gfs2_rindex_update(sdp);
1167 if (error)
1168 return error;
1169
1170 error = gfs2_quota_hold(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE);
1171 if (error)
1172 return error;
1173
1174 rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr, 1);
1175 if (!rgd) {
1176 gfs2_consist_inode(ip);
1177 error = -EIO;
1178 goto out_qs;
1179 }
1180
1181 error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, &gh);
1182 if (error)
1183 goto out_qs;
1184
1185 error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS + RES_QUOTA,
1186 sdp->sd_jdesc->jd_blocks);
1187 if (error)
1188 goto out_rg_gunlock;
1189
1190 gfs2_free_di(rgd, ip);
1191
1192 gfs2_final_release_pages(ip);
1193
1194 gfs2_trans_end(sdp);
1195
1196 out_rg_gunlock:
1197 gfs2_glock_dq_uninit(&gh);
1198 out_qs:
1199 gfs2_quota_unhold(ip);
1200 return error;
1201 }
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211 static void gfs2_glock_put_eventually(struct gfs2_glock *gl)
1212 {
1213 if (current->flags & PF_MEMALLOC)
1214 gfs2_glock_queue_put(gl);
1215 else
1216 gfs2_glock_put(gl);
1217 }
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240 static void gfs2_evict_inode(struct inode *inode)
1241 {
1242 struct super_block *sb = inode->i_sb;
1243 struct gfs2_sbd *sdp = sb->s_fs_info;
1244 struct gfs2_inode *ip = GFS2_I(inode);
1245 struct gfs2_holder gh;
1246 struct address_space *metamapping;
1247 int error;
1248
1249 if (test_bit(GIF_FREE_VFS_INODE, &ip->i_flags)) {
1250 clear_inode(inode);
1251 return;
1252 }
1253
1254 if (inode->i_nlink || sb_rdonly(sb))
1255 goto out;
1256
1257 if (test_bit(GIF_ALLOC_FAILED, &ip->i_flags)) {
1258 BUG_ON(!gfs2_glock_is_locked_by_me(ip->i_gl));
1259 gfs2_holder_mark_uninitialized(&gh);
1260 goto alloc_failed;
1261 }
1262
1263
1264 if (WARN_ON_ONCE(current->flags & PF_MEMALLOC))
1265 goto out;
1266
1267
1268 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, &gh);
1269 if (unlikely(error)) {
1270 glock_clear_object(ip->i_iopen_gh.gh_gl, ip);
1271 ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
1272 gfs2_glock_dq_uninit(&ip->i_iopen_gh);
1273 goto out;
1274 }
1275
1276 error = gfs2_check_blk_type(sdp, ip->i_no_addr, GFS2_BLKST_UNLINKED);
1277 if (error)
1278 goto out_truncate;
1279
1280 if (test_bit(GIF_INVALID, &ip->i_flags)) {
1281 error = gfs2_inode_refresh(ip);
1282 if (error)
1283 goto out_truncate;
1284 }
1285
1286
1287
1288
1289 if (inode->i_nlink)
1290 goto out_truncate;
1291
1292 alloc_failed:
1293 if (gfs2_holder_initialized(&ip->i_iopen_gh) &&
1294 test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) {
1295 ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
1296 gfs2_glock_dq_wait(&ip->i_iopen_gh);
1297 gfs2_holder_reinit(LM_ST_EXCLUSIVE, LM_FLAG_TRY_1CB | GL_NOCACHE,
1298 &ip->i_iopen_gh);
1299 error = gfs2_glock_nq(&ip->i_iopen_gh);
1300 if (error)
1301 goto out_truncate;
1302 }
1303
1304 if (S_ISDIR(inode->i_mode) &&
1305 (ip->i_diskflags & GFS2_DIF_EXHASH)) {
1306 error = gfs2_dir_exhash_dealloc(ip);
1307 if (error)
1308 goto out_unlock;
1309 }
1310
1311 if (ip->i_eattr) {
1312 error = gfs2_ea_dealloc(ip);
1313 if (error)
1314 goto out_unlock;
1315 }
1316
1317 if (!gfs2_is_stuffed(ip)) {
1318 error = gfs2_file_dealloc(ip);
1319 if (error)
1320 goto out_unlock;
1321 }
1322
1323
1324
1325
1326
1327 glock_clear_object(ip->i_gl, ip);
1328 error = gfs2_dinode_dealloc(ip);
1329 goto out_unlock;
1330
1331 out_truncate:
1332 gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL |
1333 GFS2_LFC_EVICT_INODE);
1334 metamapping = gfs2_glock2aspace(ip->i_gl);
1335 if (test_bit(GLF_DIRTY, &ip->i_gl->gl_flags)) {
1336 filemap_fdatawrite(metamapping);
1337 filemap_fdatawait(metamapping);
1338 }
1339 write_inode_now(inode, 1);
1340 gfs2_ail_flush(ip->i_gl, 0);
1341
1342 error = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks);
1343 if (error)
1344 goto out_unlock;
1345
1346 truncate_inode_pages(&inode->i_data, 0);
1347 truncate_inode_pages(metamapping, 0);
1348 gfs2_trans_end(sdp);
1349
1350 out_unlock:
1351 if (gfs2_rs_active(&ip->i_res))
1352 gfs2_rs_deltree(&ip->i_res);
1353
1354 if (gfs2_holder_initialized(&ip->i_iopen_gh)) {
1355 glock_clear_object(ip->i_iopen_gh.gh_gl, ip);
1356 if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) {
1357 ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
1358 gfs2_glock_dq(&ip->i_iopen_gh);
1359 }
1360 gfs2_holder_uninit(&ip->i_iopen_gh);
1361 }
1362 if (gfs2_holder_initialized(&gh)) {
1363 glock_clear_object(ip->i_gl, ip);
1364 gfs2_glock_dq_uninit(&gh);
1365 }
1366 if (error && error != GLR_TRYFAILED && error != -EROFS)
1367 fs_warn(sdp, "gfs2_evict_inode: %d\n", error);
1368 out:
1369 truncate_inode_pages_final(&inode->i_data);
1370 gfs2_rsqa_delete(ip, NULL);
1371 gfs2_ordered_del_inode(ip);
1372 clear_inode(inode);
1373 gfs2_dir_hash_inval(ip);
1374 glock_clear_object(ip->i_gl, ip);
1375 wait_on_bit_io(&ip->i_flags, GIF_GLOP_PENDING, TASK_UNINTERRUPTIBLE);
1376 gfs2_glock_add_to_lru(ip->i_gl);
1377 gfs2_glock_put_eventually(ip->i_gl);
1378 ip->i_gl = NULL;
1379 if (gfs2_holder_initialized(&ip->i_iopen_gh)) {
1380 struct gfs2_glock *gl = ip->i_iopen_gh.gh_gl;
1381
1382 glock_clear_object(gl, ip);
1383 ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
1384 gfs2_glock_hold(gl);
1385 gfs2_glock_dq_uninit(&ip->i_iopen_gh);
1386 gfs2_glock_put_eventually(gl);
1387 }
1388 }
1389
1390 static struct inode *gfs2_alloc_inode(struct super_block *sb)
1391 {
1392 struct gfs2_inode *ip;
1393
1394 ip = kmem_cache_alloc(gfs2_inode_cachep, GFP_KERNEL);
1395 if (!ip)
1396 return NULL;
1397 ip->i_flags = 0;
1398 ip->i_gl = NULL;
1399 memset(&ip->i_res, 0, sizeof(ip->i_res));
1400 RB_CLEAR_NODE(&ip->i_res.rs_node);
1401 ip->i_rahead = 0;
1402 return &ip->i_inode;
1403 }
1404
1405 static void gfs2_free_inode(struct inode *inode)
1406 {
1407 kmem_cache_free(gfs2_inode_cachep, GFS2_I(inode));
1408 }
1409
1410 const struct super_operations gfs2_super_ops = {
1411 .alloc_inode = gfs2_alloc_inode,
1412 .free_inode = gfs2_free_inode,
1413 .write_inode = gfs2_write_inode,
1414 .dirty_inode = gfs2_dirty_inode,
1415 .evict_inode = gfs2_evict_inode,
1416 .put_super = gfs2_put_super,
1417 .sync_fs = gfs2_sync_fs,
1418 .freeze_super = gfs2_freeze,
1419 .thaw_super = gfs2_unfreeze,
1420 .statfs = gfs2_statfs,
1421 .drop_inode = gfs2_drop_inode,
1422 .show_options = gfs2_show_options,
1423 };
1424