]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/gfs2/glock.c
Merge tag 'mtd/for-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux
[linux.git] / fs / gfs2 / glock.c
index f1ebcb42cbf56a7fa8ac549b06d46a222c479caa..e23fb8b7b020ef56f6bde4d93af0c48daa3a2005 100644 (file)
@@ -544,7 +544,7 @@ __acquires(&gl->gl_lockref.lock)
        unsigned int lck_flags = (unsigned int)(gh ? gh->gh_flags : 0);
        int ret;
 
-       if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) &&
+       if (unlikely(test_bit(SDF_WITHDRAWN, &sdp->sd_flags)) &&
            target != LM_ST_UNLOCKED)
                return;
        lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP |
@@ -581,7 +581,7 @@ __acquires(&gl->gl_lockref.lock)
                }
                else if (ret) {
                        fs_err(sdp, "lm_lock ret %d\n", ret);
-                       GLOCK_BUG_ON(gl, !test_bit(SDF_SHUTDOWN,
+                       GLOCK_BUG_ON(gl, !test_bit(SDF_WITHDRAWN,
                                                   &sdp->sd_flags));
                }
        } else { /* lock_nolock */
@@ -681,7 +681,7 @@ static void delete_work_func(struct work_struct *work)
                goto out;
 
        inode = gfs2_lookup_by_inum(sdp, no_addr, NULL, GFS2_BLKST_UNLINKED);
-       if (inode && !IS_ERR(inode)) {
+       if (!IS_ERR_OR_NULL(inode)) {
                d_prune_aliases(inode);
                iput(inode);
        }
@@ -1075,7 +1075,7 @@ __acquires(&gl->gl_lockref.lock)
        fs_err(sdp, "pid: %d\n", pid_nr(gh->gh_owner_pid));
        fs_err(sdp, "lock type: %d req lock state : %d\n",
               gh->gh_gl->gl_name.ln_type, gh->gh_state);
-       gfs2_dump_glock(NULL, gl);
+       gfs2_dump_glock(NULL, gl, true);
        BUG();
 }
 
@@ -1094,7 +1094,7 @@ int gfs2_glock_nq(struct gfs2_holder *gh)
        struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
        int error = 0;
 
-       if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
+       if (unlikely(test_bit(SDF_WITHDRAWN, &sdp->sd_flags)))
                return -EIO;
 
        if (test_bit(GLF_LRU, &gl->gl_flags))
@@ -1610,16 +1610,16 @@ void gfs2_glock_thaw(struct gfs2_sbd *sdp)
        glock_hash_walk(thaw_glock, sdp);
 }
 
-static void dump_glock(struct seq_file *seq, struct gfs2_glock *gl)
+static void dump_glock(struct seq_file *seq, struct gfs2_glock *gl, bool fsid)
 {
        spin_lock(&gl->gl_lockref.lock);
-       gfs2_dump_glock(seq, gl);
+       gfs2_dump_glock(seq, gl, fsid);
        spin_unlock(&gl->gl_lockref.lock);
 }
 
 static void dump_glock_func(struct gfs2_glock *gl)
 {
-       dump_glock(NULL, gl);
+       dump_glock(NULL, gl, true);
 }
 
 /**
@@ -1704,10 +1704,12 @@ static const char *hflags2str(char *buf, u16 flags, unsigned long iflags)
  * dump_holder - print information about a glock holder
  * @seq: the seq_file struct
  * @gh: the glock holder
+ * @fs_id_buf: pointer to file system id (if requested)
  *
  */
 
-static void dump_holder(struct seq_file *seq, const struct gfs2_holder *gh)
+static void dump_holder(struct seq_file *seq, const struct gfs2_holder *gh,
+                       const char *fs_id_buf)
 {
        struct task_struct *gh_owner = NULL;
        char flags_buf[32];
@@ -1715,8 +1717,8 @@ static void dump_holder(struct seq_file *seq, const struct gfs2_holder *gh)
        rcu_read_lock();
        if (gh->gh_owner_pid)
                gh_owner = pid_task(gh->gh_owner_pid, PIDTYPE_PID);
-       gfs2_print_dbg(seq, " H: s:%s f:%s e:%d p:%ld [%s] %pS\n",
-                      state2str(gh->gh_state),
+       gfs2_print_dbg(seq, "%s H: s:%s f:%s e:%d p:%ld [%s] %pS\n",
+                      fs_id_buf, state2str(gh->gh_state),
                       hflags2str(flags_buf, gh->gh_flags, gh->gh_iflags),
                       gh->gh_error,
                       gh->gh_owner_pid ? (long)pid_nr(gh->gh_owner_pid) : -1,
@@ -1766,6 +1768,7 @@ static const char *gflags2str(char *buf, const struct gfs2_glock *gl)
  * gfs2_dump_glock - print information about a glock
  * @seq: The seq_file struct
  * @gl: the glock
+ * @fsid: If true, also dump the file system id
  *
  * The file format is as follows:
  * One line per object, capital letters are used to indicate objects
@@ -1779,19 +1782,24 @@ static const char *gflags2str(char *buf, const struct gfs2_glock *gl)
  *
  */
 
-void gfs2_dump_glock(struct seq_file *seq, struct gfs2_glock *gl)
+void gfs2_dump_glock(struct seq_file *seq, struct gfs2_glock *gl, bool fsid)
 {
        const struct gfs2_glock_operations *glops = gl->gl_ops;
        unsigned long long dtime;
        const struct gfs2_holder *gh;
        char gflags_buf[32];
+       char fs_id_buf[GFS2_FSNAME_LEN + 3 * sizeof(int) + 2];
+       struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
 
+       memset(fs_id_buf, 0, sizeof(fs_id_buf));
+       if (fsid && sdp) /* safety precaution */
+               sprintf(fs_id_buf, "fsid=%s: ", sdp->sd_fsname);
        dtime = jiffies - gl->gl_demote_time;
        dtime *= 1000000/HZ; /* demote time in uSec */
        if (!test_bit(GLF_DEMOTE, &gl->gl_flags))
                dtime = 0;
-       gfs2_print_dbg(seq, "G:  s:%s n:%u/%llx f:%s t:%s d:%s/%llu a:%d v:%d r:%d m:%ld\n",
-                 state2str(gl->gl_state),
+       gfs2_print_dbg(seq, "%sG:  s:%s n:%u/%llx f:%s t:%s d:%s/%llu a:%d "
+                      "v:%d r:%d m:%ld\n", fs_id_buf, state2str(gl->gl_state),
                  gl->gl_name.ln_type,
                  (unsigned long long)gl->gl_name.ln_number,
                  gflags2str(gflags_buf, gl),
@@ -1802,10 +1810,10 @@ void gfs2_dump_glock(struct seq_file *seq, struct gfs2_glock *gl)
                  (int)gl->gl_lockref.count, gl->gl_hold_time);
 
        list_for_each_entry(gh, &gl->gl_holders, gh_list)
-               dump_holder(seq, gh);
+               dump_holder(seq, gh, fs_id_buf);
 
        if (gl->gl_state != LM_ST_UNLOCKED && glops->go_dump)
-               glops->go_dump(seq, gl);
+               glops->go_dump(seq, gl, fs_id_buf);
 }
 
 static int gfs2_glstats_seq_show(struct seq_file *seq, void *iter_ptr)
@@ -2006,7 +2014,7 @@ static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)
 
 static int gfs2_glock_seq_show(struct seq_file *seq, void *iter_ptr)
 {
-       dump_glock(seq, iter_ptr);
+       dump_glock(seq, iter_ptr, false);
        return 0;
 }