Whamcloud - gitweb
LU-1812 osd-ldiskfs: oti_obj_dentry needs d_sb set
authorJames Simmons <uja.ornl@gmail.com>
Mon, 8 Apr 2013 11:25:49 +0000 (07:25 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 9 Apr 2013 03:20:52 +0000 (23:20 -0400)
Commit 431547b3 (v2.6.33) changed the generic xattr handlers to
use dentry->d_sb rather than dentry->d_inode->i_sb.

This patch ensures it's set before calling the xattr ops, which filter
through the generic xattr handlers.

Really, since any call into the kernel using a dentry can deref d_sb,
it should be set so we'll set it for fsync as well.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Change-Id: I0ce38970cd839a220f852f96632b473011adbdc6
Reviewed-on: http://review.whamcloud.com/5120
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-ldiskfs/osd_internal.h
lustre/osd-ldiskfs/osd_io.c

index 135acf9..5d44fc2 100644 (file)
@@ -172,6 +172,7 @@ static inline int __osd_xattr_get(struct inode *inode, struct dentry *dentry,
                                  const char *name, void *buf, int len)
 {
        dentry->d_inode = inode;
+       dentry->d_sb = inode->i_sb;
        return inode->i_op->getxattr(dentry, name, buf, len);
 }
 
@@ -2684,6 +2685,7 @@ static int osd_xattr_list(const struct lu_env *env, struct dt_object *dt,
                 return -EACCES;
 
         dentry->d_inode = inode;
+       dentry->d_sb = inode->i_sb;
         return inode->i_op->listxattr(dentry, buf->lb_buf, buf->lb_len);
 }
 
@@ -2729,6 +2731,7 @@ static int osd_xattr_del(const struct lu_env *env, struct dt_object *dt,
 
        ll_vfs_dq_init(inode);
         dentry->d_inode = inode;
+       dentry->d_sb = inode->i_sb;
         rc = inode->i_op->removexattr(dentry, name);
         return rc;
 }
@@ -2832,6 +2835,7 @@ static int osd_object_sync(const struct lu_env *env, struct dt_object *dt)
        ENTRY;
 
        dentry->d_inode = inode;
+       dentry->d_sb = inode->i_sb;
        file->f_dentry = dentry;
        file->f_mapping = inode->i_mapping;
        file->f_op = inode->i_fop;
index 73432fe..628f90e 100644 (file)
@@ -614,6 +614,7 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
 
        ll_vfs_dq_init(inode);
        dentry->d_inode = inode;
+       dentry->d_sb = inode->i_sb;
        return inode->i_op->setxattr(dentry, name, buf, buflen, fl);
 }
 
index f350188..695e883 100644 (file)
@@ -1307,6 +1307,7 @@ static int osd_fiemap_get(const struct lu_env *env, struct dt_object *dt,
 
         LASSERT(inode);
         dentry->d_inode = inode;
+       dentry->d_sb = inode->i_sb;
         file->f_dentry = dentry;
         file->f_mapping = inode->i_mapping;
         file->f_op = inode->i_fop;