Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2: ocfs2/trivial: Wrap ocfs2_sysfile_cluster_lock_key within define. ocfs2: Add lockdep annotations vfs: Set special lockdep map for dirs only if not set by fs ocfs2: Disable orphan scanning for local and hard-ro mounts ocfs2: Do not initialize lvb in ocfs2_orphan_scan_lock_res_init() ocfs2: Stop orphan scan as early as possible during umount ocfs2: Fix ocfs2_osb_dump() ocfs2: Pin journal head before accessing jh->b_committed_data ocfs2: Update atime in splice read if necessary. ocfs2: Provide the ocfs2_dlm_lvb_valid() stack API.
This commit is contained in:
@@ -205,11 +205,10 @@ static const match_table_t tokens = {
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
|
||||
{
|
||||
int out = 0;
|
||||
int i;
|
||||
struct ocfs2_cluster_connection *cconn = osb->cconn;
|
||||
struct ocfs2_recovery_map *rm = osb->recovery_map;
|
||||
struct ocfs2_orphan_scan *os;
|
||||
struct ocfs2_orphan_scan *os = &osb->osb_orphan_scan;
|
||||
int i, out = 0;
|
||||
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s => Id: %-s Uuid: %-s Gen: 0x%X Label: %-s\n",
|
||||
@@ -234,20 +233,24 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
|
||||
"%10s => Opts: 0x%lX AtimeQuanta: %u\n", "Mount",
|
||||
osb->s_mount_opt, osb->s_atime_quantum);
|
||||
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s => Stack: %s Name: %*s Version: %d.%d\n",
|
||||
"Cluster",
|
||||
(*osb->osb_cluster_stack == '\0' ?
|
||||
"o2cb" : osb->osb_cluster_stack),
|
||||
cconn->cc_namelen, cconn->cc_name,
|
||||
cconn->cc_version.pv_major, cconn->cc_version.pv_minor);
|
||||
if (cconn) {
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s => Stack: %s Name: %*s "
|
||||
"Version: %d.%d\n", "Cluster",
|
||||
(*osb->osb_cluster_stack == '\0' ?
|
||||
"o2cb" : osb->osb_cluster_stack),
|
||||
cconn->cc_namelen, cconn->cc_name,
|
||||
cconn->cc_version.pv_major,
|
||||
cconn->cc_version.pv_minor);
|
||||
}
|
||||
|
||||
spin_lock(&osb->dc_task_lock);
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s => Pid: %d Count: %lu WakeSeq: %lu "
|
||||
"WorkSeq: %lu\n", "DownCnvt",
|
||||
task_pid_nr(osb->dc_task), osb->blocked_lock_count,
|
||||
osb->dc_wake_sequence, osb->dc_work_sequence);
|
||||
(osb->dc_task ? task_pid_nr(osb->dc_task) : -1),
|
||||
osb->blocked_lock_count, osb->dc_wake_sequence,
|
||||
osb->dc_work_sequence);
|
||||
spin_unlock(&osb->dc_task_lock);
|
||||
|
||||
spin_lock(&osb->osb_lock);
|
||||
@@ -267,14 +270,15 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
|
||||
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s => Pid: %d Interval: %lu Needs: %d\n", "Commit",
|
||||
task_pid_nr(osb->commit_task), osb->osb_commit_interval,
|
||||
(osb->commit_task ? task_pid_nr(osb->commit_task) : -1),
|
||||
osb->osb_commit_interval,
|
||||
atomic_read(&osb->needs_checkpoint));
|
||||
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s => State: %d NumTxns: %d TxnId: %lu\n",
|
||||
"%10s => State: %d TxnId: %lu NumTxns: %d\n",
|
||||
"Journal", osb->journal->j_state,
|
||||
atomic_read(&osb->journal->j_num_trans),
|
||||
osb->journal->j_trans_id);
|
||||
osb->journal->j_trans_id,
|
||||
atomic_read(&osb->journal->j_num_trans));
|
||||
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s => GlobalAllocs: %d LocalAllocs: %d "
|
||||
@@ -300,9 +304,18 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
|
||||
atomic_read(&osb->s_num_inodes_stolen));
|
||||
spin_unlock(&osb->osb_lock);
|
||||
|
||||
out += snprintf(buf + out, len - out, "OrphanScan => ");
|
||||
out += snprintf(buf + out, len - out, "Local: %u Global: %u ",
|
||||
os->os_count, os->os_seqno);
|
||||
out += snprintf(buf + out, len - out, " Last Scan: ");
|
||||
if (atomic_read(&os->os_state) == ORPHAN_SCAN_INACTIVE)
|
||||
out += snprintf(buf + out, len - out, "Disabled\n");
|
||||
else
|
||||
out += snprintf(buf + out, len - out, "%lu seconds ago\n",
|
||||
(get_seconds() - os->os_scantime.tv_sec));
|
||||
|
||||
out += snprintf(buf + out, len - out, "%10s => %3s %10s\n",
|
||||
"Slots", "Num", "RecoGen");
|
||||
|
||||
for (i = 0; i < osb->max_slots; ++i) {
|
||||
out += snprintf(buf + out, len - out,
|
||||
"%10s %c %3d %10d\n",
|
||||
@@ -311,13 +324,6 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
|
||||
i, osb->slot_recovery_generations[i]);
|
||||
}
|
||||
|
||||
os = &osb->osb_orphan_scan;
|
||||
out += snprintf(buf + out, len - out, "Orphan Scan=> ");
|
||||
out += snprintf(buf + out, len - out, "Local: %u Global: %u ",
|
||||
os->os_count, os->os_seqno);
|
||||
out += snprintf(buf + out, len - out, " Last Scan: %lu seconds ago\n",
|
||||
(get_seconds() - os->os_scantime.tv_sec));
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
@@ -1175,6 +1181,9 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
|
||||
atomic_set(&osb->vol_state, VOLUME_MOUNTED_QUOTAS);
|
||||
wake_up(&osb->osb_mount_event);
|
||||
|
||||
/* Start this when the mount is almost sure of being successful */
|
||||
ocfs2_orphan_scan_init(osb);
|
||||
|
||||
mlog_exit(status);
|
||||
return status;
|
||||
|
||||
@@ -1810,14 +1819,15 @@ static void ocfs2_dismount_volume(struct super_block *sb, int mnt_err)
|
||||
|
||||
debugfs_remove(osb->osb_ctxt);
|
||||
|
||||
/* Orphan scan should be stopped as early as possible */
|
||||
ocfs2_orphan_scan_stop(osb);
|
||||
|
||||
ocfs2_disable_quotas(osb);
|
||||
|
||||
ocfs2_shutdown_local_alloc(osb);
|
||||
|
||||
ocfs2_truncate_log_shutdown(osb);
|
||||
|
||||
ocfs2_orphan_scan_stop(osb);
|
||||
|
||||
/* This will disable recovery and flush any recovery work. */
|
||||
ocfs2_recovery_exit(osb);
|
||||
|
||||
@@ -1978,13 +1988,6 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
||||
goto bail;
|
||||
}
|
||||
|
||||
status = ocfs2_orphan_scan_init(osb);
|
||||
if (status) {
|
||||
mlog(ML_ERROR, "Unable to initialize delayed orphan scan\n");
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
}
|
||||
|
||||
init_waitqueue_head(&osb->checkpoint_event);
|
||||
atomic_set(&osb->needs_checkpoint, 0);
|
||||
|
||||
|
Reference in New Issue
Block a user