]> nv-tegra.nvidia Code Review - linux-2.6.git/commitdiff
Merge master.kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw
authorLinus Torvalds <torvalds@woody.osdl.org>
Thu, 7 Dec 2006 17:13:20 +0000 (09:13 -0800)
committerLinus Torvalds <torvalds@woody.osdl.org>
Thu, 7 Dec 2006 17:13:20 +0000 (09:13 -0800)
* master.kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw: (73 commits)
  [DLM] Clean up lowcomms
  [GFS2] Change gfs2_fsync() to use write_inode_now()
  [GFS2] Fix indent in recovery.c
  [GFS2] Don't flush everything on fdatasync
  [GFS2] Add a comment about reading the super block
  [GFS2] Mount problem with the GFS2 code
  [GFS2] Remove gfs2_check_acl()
  [DLM] fix format warnings in rcom.c and recoverd.c
  [GFS2] lock function parameter
  [DLM] don't accept replies to old recovery messages
  [DLM] fix size of STATUS_REPLY message
  [GFS2] fs/gfs2/log.c:log_bmap() fix printk format warning
  [DLM] fix add_requestqueue checking nodes list
  [GFS2] Fix recursive locking in gfs2_getattr
  [GFS2] Fix recursive locking in gfs2_permission
  [GFS2] Reduce number of arguments to meta_io.c:getbuf()
  [GFS2] Move gfs2_meta_syncfs() into log.c
  [GFS2] Fix journal flush problem
  [GFS2] mark_inode_dirty after write to stuffed file
  [GFS2] Fix glock ordering on inode creation
  ...

1  2 
fs/gfs2/glock.c
fs/gfs2/util.h

diff --combined fs/gfs2/glock.c
index 55f5333dae99e2104eabd8025d7b03560fd9f154,f130f9894bda2994eebea4d95774893df1494d97..438146904b5839727ac2c378c5df87f574cfedaa
@@@ -35,7 -35,7 +35,7 @@@
  
  struct greedy {
        struct gfs2_holder gr_gh;
 -      struct work_struct gr_work;
 +      struct delayed_work gr_work;
  };
  
  struct gfs2_gl_hash_bucket {
@@@ -96,7 -96,7 +96,7 @@@ static inline rwlock_t *gl_lock_addr(un
        return &gl_hash_locks[x & (GL_HASH_LOCK_SZ-1)];
  }
  #else /* not SMP, so no spinlocks required */
- static inline rwlock_t *gl_lock_addr(x)
+ static inline rwlock_t *gl_lock_addr(unsigned int x)
  {
        return NULL;
  }
@@@ -769,7 -769,7 +769,7 @@@ restart
        } else {
                spin_unlock(&gl->gl_spin);
  
-               new_gh = gfs2_holder_get(gl, state, LM_FLAG_TRY, GFP_KERNEL);
+               new_gh = gfs2_holder_get(gl, state, LM_FLAG_TRY, GFP_NOFS);
                if (!new_gh)
                        return;
                set_bit(HIF_DEMOTE, &new_gh->gh_iflags);
@@@ -785,21 -785,6 +785,6 @@@ out
                gfs2_holder_put(new_gh);
  }
  
- void gfs2_glock_inode_squish(struct inode *inode)
- {
-       struct gfs2_holder gh;
-       struct gfs2_glock *gl = GFS2_I(inode)->i_gl;
-       gfs2_holder_init(gl, LM_ST_UNLOCKED, 0, &gh);
-       set_bit(HIF_DEMOTE, &gh.gh_iflags);
-       spin_lock(&gl->gl_spin);
-       gfs2_assert(inode->i_sb->s_fs_info, list_empty(&gl->gl_holders));
-       list_add_tail(&gh.gh_list, &gl->gl_waiters2);
-       run_queue(gl);
-       spin_unlock(&gl->gl_spin);
-       wait_for_completion(&gh.gh_wait);
-       gfs2_holder_uninit(&gh);
- }
  /**
   * state_change - record that the glock is now in a different state
   * @gl: the glock
@@@ -847,12 -832,12 +832,12 @@@ static void xmote_bh(struct gfs2_glock 
  
        if (prev_state != LM_ST_UNLOCKED && !(ret & LM_OUT_CACHEABLE)) {
                if (glops->go_inval)
-                       glops->go_inval(gl, DIO_METADATA | DIO_DATA);
+                       glops->go_inval(gl, DIO_METADATA);
        } else if (gl->gl_state == LM_ST_DEFERRED) {
                /* We might not want to do this here.
                   Look at moving to the inode glops. */
                if (glops->go_inval)
-                       glops->go_inval(gl, DIO_DATA);
+                       glops->go_inval(gl, 0);
        }
  
        /*  Deal with each possible exit condition  */
@@@ -954,7 -939,7 +939,7 @@@ void gfs2_glock_xmote_th(struct gfs2_gl
        gfs2_assert_warn(sdp, state != gl->gl_state);
  
        if (gl->gl_state == LM_ST_EXCLUSIVE && glops->go_sync)
-               glops->go_sync(gl, DIO_METADATA | DIO_DATA | DIO_RELEASE);
+               glops->go_sync(gl);
  
        gfs2_glock_hold(gl);
        gl->gl_req_bh = xmote_bh;
@@@ -995,7 -980,7 +980,7 @@@ static void drop_bh(struct gfs2_glock *
        state_change(gl, LM_ST_UNLOCKED);
  
        if (glops->go_inval)
-               glops->go_inval(gl, DIO_METADATA | DIO_DATA);
+               glops->go_inval(gl, DIO_METADATA);
  
        if (gh) {
                spin_lock(&gl->gl_spin);
@@@ -1041,7 -1026,7 +1026,7 @@@ void gfs2_glock_drop_th(struct gfs2_glo
        gfs2_assert_warn(sdp, gl->gl_state != LM_ST_UNLOCKED);
  
        if (gl->gl_state == LM_ST_EXCLUSIVE && glops->go_sync)
-               glops->go_sync(gl, DIO_METADATA | DIO_DATA | DIO_RELEASE);
+               glops->go_sync(gl);
  
        gfs2_glock_hold(gl);
        gl->gl_req_bh = drop_bh;
@@@ -1244,9 -1229,6 +1229,6 @@@ restart
  
        clear_bit(GLF_PREFETCH, &gl->gl_flags);
  
-       if (error == GLR_TRYFAILED && (gh->gh_flags & GL_DUMP))
-               dump_glock(gl);
        return error;
  }
  
@@@ -1368,9 -1350,9 +1350,9 @@@ static void gfs2_glock_prefetch(struct 
        glops->go_xmote_th(gl, state, flags);
  }
  
 -static void greedy_work(void *data)
 +static void greedy_work(struct work_struct *work)
  {
 -      struct greedy *gr = data;
 +      struct greedy *gr = container_of(work, struct greedy, gr_work.work);
        struct gfs2_holder *gh = &gr->gr_gh;
        struct gfs2_glock *gl = gh->gh_gl;
        const struct gfs2_glock_operations *glops = gl->gl_ops;
@@@ -1422,7 -1404,7 +1404,7 @@@ int gfs2_glock_be_greedy(struct gfs2_gl
  
        gfs2_holder_init(gl, 0, 0, gh);
        set_bit(HIF_GREEDY, &gh->gh_iflags);
 -      INIT_WORK(&gr->gr_work, greedy_work, gr);
 +      INIT_DELAYED_WORK(&gr->gr_work, greedy_work);
  
        set_bit(GLF_SKIP_WAITERS2, &gl->gl_flags);
        schedule_delayed_work(&gr->gr_work, time);
@@@ -1923,7 -1905,7 +1905,7 @@@ out
  
  static void scan_glock(struct gfs2_glock *gl)
  {
-       if (gl->gl_ops == &gfs2_inode_glops)
+       if (gl->gl_ops == &gfs2_inode_glops && gl->gl_object)
                return;
  
        if (gfs2_glmutex_trylock(gl)) {
@@@ -2078,7 -2060,7 +2060,7 @@@ static int dump_inode(struct gfs2_inod
        printk(KERN_INFO "    num = %llu %llu\n",
                    (unsigned long long)ip->i_num.no_formal_ino,
                    (unsigned long long)ip->i_num.no_addr);
-       printk(KERN_INFO "    type = %u\n", IF2DT(ip->i_di.di_mode));
+       printk(KERN_INFO "    type = %u\n", IF2DT(ip->i_inode.i_mode));
        printk(KERN_INFO "    i_flags =");
        for (x = 0; x < 32; x++)
                if (test_bit(x, &ip->i_flags))
diff --combined fs/gfs2/util.h
index 7984dcf89ad011bc489752a1351e4c3bc9c3177b,ca8667c3ed07375817839729d8b6d8926a4d6008..28938a46cf4785c63544ff4bea34aa5ef6052b32
@@@ -83,8 -83,7 +83,7 @@@ static inline int gfs2_meta_check_i(str
                                    char *file, unsigned int line)
  {
        struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
-       u32 magic = mh->mh_magic;
-       magic = be32_to_cpu(magic);
+       u32 magic = be32_to_cpu(mh->mh_magic);
        if (unlikely(magic != GFS2_MAGIC))
                return gfs2_meta_check_ii(sdp, bh, "magic number", function,
                                          file, line);
@@@ -107,9 -106,8 +106,8 @@@ static inline int gfs2_metatype_check_i
                                        char *file, unsigned int line)
  {
        struct gfs2_meta_header *mh = (struct gfs2_meta_header *)bh->b_data;
-       u32 magic = mh->mh_magic;
+       u32 magic = be32_to_cpu(mh->mh_magic);
        u16 t = be32_to_cpu(mh->mh_type);
-       magic = be32_to_cpu(magic);
        if (unlikely(magic != GFS2_MAGIC))
                return gfs2_meta_check_ii(sdp, bh, "magic number", function,
                                          file, line);
@@@ -146,9 -144,9 +144,9 @@@ int gfs2_io_error_bh_i(struct gfs2_sbd 
  gfs2_io_error_bh_i((sdp), (bh), __FUNCTION__, __FILE__, __LINE__);
  
  
 -extern kmem_cache_t *gfs2_glock_cachep;
 -extern kmem_cache_t *gfs2_inode_cachep;
 -extern kmem_cache_t *gfs2_bufdata_cachep;
 +extern struct kmem_cache *gfs2_glock_cachep;
 +extern struct kmem_cache *gfs2_inode_cachep;
 +extern struct kmem_cache *gfs2_bufdata_cachep;
  
  static inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt,
                                           unsigned int *p)