2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
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.
10 #include <linux/sched.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/gfs2_ondisk.h>
16 #include <linux/lm_interface.h>
32 * ail_empty_gl - remove all buffers for a given lock from the AIL
35 * None of the buffers should be dirty, locked, or pinned.
38 static void gfs2_ail_empty_gl(struct gfs2_glock
*gl
)
40 struct gfs2_sbd
*sdp
= gl
->gl_sbd
;
42 struct list_head
*head
= &gl
->gl_ail_list
;
43 struct gfs2_bufdata
*bd
;
44 struct buffer_head
*bh
;
48 blocks
= atomic_read(&gl
->gl_ail_count
);
52 error
= gfs2_trans_begin(sdp
, 0, blocks
);
53 if (gfs2_assert_withdraw(sdp
, !error
))
57 while (!list_empty(head
)) {
58 bd
= list_entry(head
->next
, struct gfs2_bufdata
,
61 blkno
= bh
->b_blocknr
;
62 gfs2_assert_withdraw(sdp
, !buffer_busy(bh
));
65 list_del(&bd
->bd_ail_st_list
);
66 list_del(&bd
->bd_ail_gl_list
);
67 atomic_dec(&gl
->gl_ail_count
);
71 gfs2_trans_add_revoke(sdp
, blkno
);
75 gfs2_assert_withdraw(sdp
, !atomic_read(&gl
->gl_ail_count
));
79 gfs2_log_flush(sdp
, NULL
);
83 * gfs2_pte_inval - Sync and invalidate all PTEs associated with a glock
88 static void gfs2_pte_inval(struct gfs2_glock
*gl
)
90 struct gfs2_inode
*ip
;
95 if (!ip
|| !S_ISREG(ip
->i_di
.di_mode
))
98 if (!test_bit(GIF_PAGED
, &ip
->i_flags
))
101 unmap_shared_mapping_range(inode
->i_mapping
, 0, 0);
103 if (test_bit(GIF_SW_PAGED
, &ip
->i_flags
))
104 set_bit(GLF_DIRTY
, &gl
->gl_flags
);
106 clear_bit(GIF_SW_PAGED
, &ip
->i_flags
);
110 * gfs2_page_inval - Invalidate all pages associated with a glock
115 static void gfs2_page_inval(struct gfs2_glock
*gl
)
117 struct gfs2_inode
*ip
;
121 inode
= &ip
->i_inode
;
122 if (!ip
|| !S_ISREG(ip
->i_di
.di_mode
))
125 truncate_inode_pages(inode
->i_mapping
, 0);
126 gfs2_assert_withdraw(GFS2_SB(&ip
->i_inode
), !inode
->i_mapping
->nrpages
);
127 clear_bit(GIF_PAGED
, &ip
->i_flags
);
131 * gfs2_page_wait - Wait for writeback of data
134 * Syncs data (not metadata) for a regular file.
135 * No-op for all other types.
138 static void gfs2_page_wait(struct gfs2_glock
*gl
)
140 struct gfs2_inode
*ip
= gl
->gl_object
;
141 struct inode
*inode
= &ip
->i_inode
;
142 struct address_space
*mapping
= inode
->i_mapping
;
145 if (!S_ISREG(ip
->i_di
.di_mode
))
148 error
= filemap_fdatawait(mapping
);
150 /* Put back any errors cleared by filemap_fdatawait()
151 so they can be caught by someone who can pass them
154 if (error
== -ENOSPC
)
155 set_bit(AS_ENOSPC
, &mapping
->flags
);
157 set_bit(AS_EIO
, &mapping
->flags
);
161 static void gfs2_page_writeback(struct gfs2_glock
*gl
)
163 struct gfs2_inode
*ip
= gl
->gl_object
;
164 struct inode
*inode
= &ip
->i_inode
;
165 struct address_space
*mapping
= inode
->i_mapping
;
167 if (!S_ISREG(ip
->i_di
.di_mode
))
170 filemap_fdatawrite(mapping
);
174 * meta_go_sync - sync out the metadata for this glock
178 * Called when demoting or unlocking an EX glock. We must flush
179 * to disk all dirty buffers/pages relating to this glock, and must not
180 * not return to caller to demote/unlock the glock until I/O is complete.
183 static void meta_go_sync(struct gfs2_glock
*gl
, int flags
)
185 if (!(flags
& DIO_METADATA
))
188 if (test_and_clear_bit(GLF_DIRTY
, &gl
->gl_flags
)) {
189 gfs2_log_flush(gl
->gl_sbd
, gl
);
191 if (flags
& DIO_RELEASE
)
192 gfs2_ail_empty_gl(gl
);
198 * meta_go_inval - invalidate the metadata for this glock
204 static void meta_go_inval(struct gfs2_glock
*gl
, int flags
)
206 if (!(flags
& DIO_METADATA
))
214 * inode_go_xmote_th - promote/demote a glock
216 * @state: the requested state
221 static void inode_go_xmote_th(struct gfs2_glock
*gl
, unsigned int state
,
224 if (gl
->gl_state
!= LM_ST_UNLOCKED
)
226 gfs2_glock_xmote_th(gl
, state
, flags
);
230 * inode_go_xmote_bh - After promoting/demoting a glock
235 static void inode_go_xmote_bh(struct gfs2_glock
*gl
)
237 struct gfs2_holder
*gh
= gl
->gl_req_gh
;
238 struct buffer_head
*bh
;
241 if (gl
->gl_state
!= LM_ST_UNLOCKED
&&
242 (!gh
|| !(gh
->gh_flags
& GL_SKIP
))) {
243 error
= gfs2_meta_read(gl
, gl
->gl_name
.ln_number
, 0, &bh
);
250 * inode_go_drop_th - unlock a glock
253 * Invoked from rq_demote().
254 * Another node needs the lock in EXCLUSIVE mode, or lock (unused for too long)
255 * is being purged from our node's glock cache; we're dropping lock.
258 static void inode_go_drop_th(struct gfs2_glock
*gl
)
261 gfs2_glock_drop_th(gl
);
265 * inode_go_sync - Sync the dirty data and/or metadata for an inode glock
266 * @gl: the glock protecting the inode
271 static void inode_go_sync(struct gfs2_glock
*gl
, int flags
)
273 int meta
= (flags
& DIO_METADATA
);
274 int data
= (flags
& DIO_DATA
);
276 if (test_bit(GLF_DIRTY
, &gl
->gl_flags
)) {
278 gfs2_page_writeback(gl
);
279 gfs2_log_flush(gl
->gl_sbd
, gl
);
282 clear_bit(GLF_DIRTY
, &gl
->gl_flags
);
284 gfs2_log_flush(gl
->gl_sbd
, gl
);
287 gfs2_page_writeback(gl
);
290 if (flags
& DIO_RELEASE
)
291 gfs2_ail_empty_gl(gl
);
296 * inode_go_inval - prepare a inode glock to be released
302 static void inode_go_inval(struct gfs2_glock
*gl
, int flags
)
304 int meta
= (flags
& DIO_METADATA
);
305 int data
= (flags
& DIO_DATA
);
316 * inode_go_demote_ok - Check to see if it's ok to unlock an inode glock
319 * Returns: 1 if it's ok
322 static int inode_go_demote_ok(struct gfs2_glock
*gl
)
324 struct gfs2_sbd
*sdp
= gl
->gl_sbd
;
327 if (!gl
->gl_object
&& !gl
->gl_aspace
->i_mapping
->nrpages
)
329 else if (!sdp
->sd_args
.ar_localcaching
&&
330 time_after_eq(jiffies
, gl
->gl_stamp
+
331 gfs2_tune_get(sdp
, gt_demote_secs
) * HZ
))
338 * inode_go_lock - operation done after an inode lock is locked by a process
345 static int inode_go_lock(struct gfs2_holder
*gh
)
347 struct gfs2_glock
*gl
= gh
->gh_gl
;
348 struct gfs2_inode
*ip
= gl
->gl_object
;
354 if (ip
->i_vn
!= gl
->gl_vn
) {
355 error
= gfs2_inode_refresh(ip
);
358 gfs2_inode_attr_in(ip
);
361 if ((ip
->i_di
.di_flags
& GFS2_DIF_TRUNC_IN_PROG
) &&
362 (gl
->gl_state
== LM_ST_EXCLUSIVE
) &&
363 (gh
->gh_flags
& GL_LOCAL_EXCL
))
364 error
= gfs2_truncatei_resume(ip
);
370 * inode_go_unlock - operation done before an inode lock is unlocked by a
377 static void inode_go_unlock(struct gfs2_holder
*gh
)
379 struct gfs2_glock
*gl
= gh
->gh_gl
;
380 struct gfs2_inode
*ip
= gl
->gl_object
;
384 if (test_bit(GLF_DIRTY
, &gl
->gl_flags
))
385 gfs2_inode_attr_in(ip
);
386 gfs2_meta_cache_flush(ip
);
395 static void inode_greedy(struct gfs2_glock
*gl
)
397 struct gfs2_sbd
*sdp
= gl
->gl_sbd
;
398 struct gfs2_inode
*ip
= gl
->gl_object
;
399 unsigned int quantum
= gfs2_tune_get(sdp
, gt_greedy_quantum
);
400 unsigned int max
= gfs2_tune_get(sdp
, gt_greedy_max
);
401 unsigned int new_time
;
403 spin_lock(&ip
->i_spin
);
405 if (time_after(ip
->i_last_pfault
+ quantum
, jiffies
)) {
406 new_time
= ip
->i_greedy
+ quantum
;
410 new_time
= ip
->i_greedy
- quantum
;
411 if (!new_time
|| new_time
> max
)
415 ip
->i_greedy
= new_time
;
417 spin_unlock(&ip
->i_spin
);
423 * rgrp_go_demote_ok - Check to see if it's ok to unlock a RG's glock
426 * Returns: 1 if it's ok
429 static int rgrp_go_demote_ok(struct gfs2_glock
*gl
)
431 return !gl
->gl_aspace
->i_mapping
->nrpages
;
435 * rgrp_go_lock - operation done after an rgrp lock is locked by
436 * a first holder on this node.
443 static int rgrp_go_lock(struct gfs2_holder
*gh
)
445 return gfs2_rgrp_bh_get(gh
->gh_gl
->gl_object
);
449 * rgrp_go_unlock - operation done before an rgrp lock is unlocked by
450 * a last holder on this node.
456 static void rgrp_go_unlock(struct gfs2_holder
*gh
)
458 gfs2_rgrp_bh_put(gh
->gh_gl
->gl_object
);
462 * trans_go_xmote_th - promote/demote the transaction glock
464 * @state: the requested state
469 static void trans_go_xmote_th(struct gfs2_glock
*gl
, unsigned int state
,
472 struct gfs2_sbd
*sdp
= gl
->gl_sbd
;
474 if (gl
->gl_state
!= LM_ST_UNLOCKED
&&
475 test_bit(SDF_JOURNAL_LIVE
, &sdp
->sd_flags
)) {
476 gfs2_meta_syncfs(sdp
);
477 gfs2_log_shutdown(sdp
);
480 gfs2_glock_xmote_th(gl
, state
, flags
);
484 * trans_go_xmote_bh - After promoting/demoting the transaction glock
489 static void trans_go_xmote_bh(struct gfs2_glock
*gl
)
491 struct gfs2_sbd
*sdp
= gl
->gl_sbd
;
492 struct gfs2_inode
*ip
= GFS2_I(sdp
->sd_jdesc
->jd_inode
);
493 struct gfs2_glock
*j_gl
= ip
->i_gl
;
494 struct gfs2_log_header head
;
497 if (gl
->gl_state
!= LM_ST_UNLOCKED
&&
498 test_bit(SDF_JOURNAL_LIVE
, &sdp
->sd_flags
)) {
499 gfs2_meta_cache_flush(GFS2_I(sdp
->sd_jdesc
->jd_inode
));
500 j_gl
->gl_ops
->go_inval(j_gl
, DIO_METADATA
| DIO_DATA
);
502 error
= gfs2_find_jhead(sdp
->sd_jdesc
, &head
);
505 if (!(head
.lh_flags
& GFS2_LOG_HEAD_UNMOUNT
))
508 /* Initialize some head of the log stuff */
509 if (!test_bit(SDF_SHUTDOWN
, &sdp
->sd_flags
)) {
510 sdp
->sd_log_sequence
= head
.lh_sequence
+ 1;
511 gfs2_log_pointers_init(sdp
, head
.lh_blkno
);
517 * trans_go_drop_th - unlock the transaction glock
520 * We want to sync the device even with localcaching. Remember
521 * that localcaching journal replay only marks buffers dirty.
524 static void trans_go_drop_th(struct gfs2_glock
*gl
)
526 struct gfs2_sbd
*sdp
= gl
->gl_sbd
;
528 if (test_bit(SDF_JOURNAL_LIVE
, &sdp
->sd_flags
)) {
529 gfs2_meta_syncfs(sdp
);
530 gfs2_log_shutdown(sdp
);
533 gfs2_glock_drop_th(gl
);
537 * quota_go_demote_ok - Check to see if it's ok to unlock a quota glock
540 * Returns: 1 if it's ok
543 static int quota_go_demote_ok(struct gfs2_glock
*gl
)
545 return !atomic_read(&gl
->gl_lvb_count
);
548 const struct gfs2_glock_operations gfs2_meta_glops
= {
549 .go_xmote_th
= gfs2_glock_xmote_th
,
550 .go_drop_th
= gfs2_glock_drop_th
,
551 .go_type
= LM_TYPE_META
,
554 const struct gfs2_glock_operations gfs2_inode_glops
= {
555 .go_xmote_th
= inode_go_xmote_th
,
556 .go_xmote_bh
= inode_go_xmote_bh
,
557 .go_drop_th
= inode_go_drop_th
,
558 .go_sync
= inode_go_sync
,
559 .go_inval
= inode_go_inval
,
560 .go_demote_ok
= inode_go_demote_ok
,
561 .go_lock
= inode_go_lock
,
562 .go_unlock
= inode_go_unlock
,
563 .go_greedy
= inode_greedy
,
564 .go_type
= LM_TYPE_INODE
,
567 const struct gfs2_glock_operations gfs2_rgrp_glops
= {
568 .go_xmote_th
= gfs2_glock_xmote_th
,
569 .go_drop_th
= gfs2_glock_drop_th
,
570 .go_sync
= meta_go_sync
,
571 .go_inval
= meta_go_inval
,
572 .go_demote_ok
= rgrp_go_demote_ok
,
573 .go_lock
= rgrp_go_lock
,
574 .go_unlock
= rgrp_go_unlock
,
575 .go_type
= LM_TYPE_RGRP
,
578 const struct gfs2_glock_operations gfs2_trans_glops
= {
579 .go_xmote_th
= trans_go_xmote_th
,
580 .go_xmote_bh
= trans_go_xmote_bh
,
581 .go_drop_th
= trans_go_drop_th
,
582 .go_type
= LM_TYPE_NONDISK
,
585 const struct gfs2_glock_operations gfs2_iopen_glops
= {
586 .go_xmote_th
= gfs2_glock_xmote_th
,
587 .go_drop_th
= gfs2_glock_drop_th
,
588 .go_type
= LM_TYPE_IOPEN
,
591 const struct gfs2_glock_operations gfs2_flock_glops
= {
592 .go_xmote_th
= gfs2_glock_xmote_th
,
593 .go_drop_th
= gfs2_glock_drop_th
,
594 .go_type
= LM_TYPE_FLOCK
,
597 const struct gfs2_glock_operations gfs2_nondisk_glops
= {
598 .go_xmote_th
= gfs2_glock_xmote_th
,
599 .go_drop_th
= gfs2_glock_drop_th
,
600 .go_type
= LM_TYPE_NONDISK
,
603 const struct gfs2_glock_operations gfs2_quota_glops
= {
604 .go_xmote_th
= gfs2_glock_xmote_th
,
605 .go_drop_th
= gfs2_glock_drop_th
,
606 .go_demote_ok
= quota_go_demote_ok
,
607 .go_type
= LM_TYPE_QUOTA
,
610 const struct gfs2_glock_operations gfs2_journal_glops
= {
611 .go_xmote_th
= gfs2_glock_xmote_th
,
612 .go_drop_th
= gfs2_glock_drop_th
,
613 .go_type
= LM_TYPE_JOURNAL
,