Whamcloud - gitweb
- numerous fixes from b_cray, b_1_4 and Andreas' comments.
authoryury <yury>
Thu, 23 Jun 2005 14:52:51 +0000 (14:52 +0000)
committeryury <yury>
Thu, 23 Jun 2005 14:52:51 +0000 (14:52 +0000)
lustre/llite/file.c
lustre/lov/lov_obd.c
lustre/lvfs/llog_lvfs.c
lustre/lvfs/lvfs_reint.c
lustre/obdclass/class_obd.c
lustre/obdfilter/filter.c
lustre/obdfilter/filter_lvb.c
lustre/obdfilter/filter_san.c

index b522d89..7505f9d 100644 (file)
@@ -393,7 +393,8 @@ int ll_file_open(struct inode *inode, struct file *file)
 
         down(&lli->lli_och_sem);
         if (*och_p) { /* Open handle is present */
-                if (LUSTRE_IT(it)->it_disposition) {
+                if (it_disposition(it, DISP_LOOKUP_POS) && /* Positive lookup */
+                    it_disposition(it, DISP_OPEN_OPEN)) { /* & OPEN happened */
                         struct obd_client_handle *och;
                         /* Well, there's extra open request that we do not need,
                            let's close it somehow*/
index ae74d22..9baefff 100644 (file)
@@ -976,6 +976,12 @@ static int lov_setattr(struct obd_export *exp, struct obdo *src_oa,
         if (!exp || !exp->exp_obd)
                 RETURN(-ENODEV);
 
+        LASSERT(!(src_oa->o_valid & ~(OBD_MD_FLID|OBD_MD_FLTYPE | OBD_MD_FLMODE|
+                                      OBD_MD_FLATIME | OBD_MD_FLMTIME |
+                                      OBD_MD_FLCTIME | OBD_MD_FLFLAGS |
+                                      OBD_MD_FLSIZE | OBD_MD_FLGROUP |
+                                      OBD_MD_FLUID | OBD_MD_FLGID)));
+
         LASSERT(!(src_oa->o_valid & OBD_MD_FLGROUP) || src_oa->o_gr > 0);
 
         lov = &exp->exp_obd->u.lov;
index 3a9dd92..a72b329 100644 (file)
@@ -915,7 +915,7 @@ static int llog_lvfs_destroy(struct llog_handle *loghandle)
                         down(&ctxt->loc_objects_dir->d_inode->i_sem);
                         fdentry = lookup_one_len(id_name, ctxt->loc_objects_dir,
                                                  id_len);
-                        if (fdentry == NULL || fdentry->d_inode == NULL) {
+                        if (IS_ERR(fdentry) || fdentry->d_inode == NULL) {
                                 CERROR("destroy non_existent object %s\n", 
                                        id_name);
                                 GOTO(out_err, rc = IS_ERR(fdentry) ?
index fbcf400..dbaf1ff 100644 (file)
@@ -267,7 +267,7 @@ static int lvfs_reint_link(struct super_block *sb, struct reint_record *r_rec)
         old_dentry = lookup_one_len(old_nd.last.name, old_dparent,
                                     old_nd.last.len);
 
-        if (!old_dentry || !old_dentry->d_inode ||
+        if (IS_ERR(old_dentry) || !old_dentry->d_inode ||
             is_bad_inode(old_dentry->d_inode))
                 GOTO(cleanup, rc = -ENODEV);
         if (dir->i_rdev != old_dentry->d_inode->i_rdev)
@@ -321,7 +321,7 @@ static int lvfs_reint_unlink(struct super_block *sb, struct reint_record *r_rec)
         dir = dparent->d_inode;
 
         dentry = lookup_one_len(nd.last.name, dparent, nd.last.len);
-        if (!dentry || !dentry->d_inode || is_bad_inode(dentry->d_inode))
+        if (IS_ERR(dentry) || !dentry->d_inode || is_bad_inode(dentry->d_inode))
                 GOTO(cleanup, rc = -ENODEV);
 
         if (!SMFS_DO_WRITE_KML(r_rec->u_rec.ur_flags))
@@ -390,7 +390,7 @@ static int lvfs_reint_rename(struct super_block *sb, struct reint_record *r_rec)
         dir = dparent->d_inode;
         dentry = lookup_one_len(nd.last.name, dparent, nd.last.len);
 
-        if (!dentry || !dentry->d_inode || is_bad_inode(dentry->d_inode)) {
+        if (IS_ERR(dentry) || !dentry->d_inode || is_bad_inode(dentry->d_inode)) {
                 path_release(&nd);
                 RETURN(rc);
         }
@@ -466,7 +466,7 @@ static int lvfs_reint_setattr(struct super_block *sb,
         dir = dparent->d_inode;
         dentry = lookup_one_len(nd.last.name, dparent, nd.last.len);
 
-        if (!dentry || !dentry->d_inode || is_bad_inode(dentry->d_inode)) {
+        if (IS_ERR(dentry) || !dentry->d_inode || is_bad_inode(dentry->d_inode)) {
                 path_release(&nd);
                 RETURN(rc);
         }
@@ -508,7 +508,7 @@ static int lvfs_reint_close(struct super_block *sb, struct reint_record *r_rec)
         dir = dparent->d_inode;
         dentry = lookup_one_len(nd.last.name, dparent, nd.last.len);
 
-        if (!dentry || !dentry->d_inode || is_bad_inode(dentry->d_inode)) {
+        if (IS_ERR(dentry) || !dentry->d_inode || is_bad_inode(dentry->d_inode)) {
                 path_release(&nd);
                 RETURN(rc);
         }
index b108412..82fc52c 100644 (file)
@@ -208,10 +208,8 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg)
 
                 OBD_ALLOC(lcfg, data->ioc_plen1);
                 err = copy_from_user(lcfg, data->ioc_pbuf1, data->ioc_plen1);
-                if (err)
-                        GOTO(out, err);
-
-                err = class_process_config(lcfg);
+                if (!err)
+                        err = class_process_config(lcfg);
                 OBD_FREE(lcfg, data->ioc_plen1);
                 GOTO(out, err);
         }
index 05c54f8..517285f 100644 (file)
@@ -1574,18 +1574,29 @@ static int filter_detach(struct obd_device *dev)
 
 static int filter_setup(struct obd_device *obd, obd_count len, void *buf)
 {
-        struct lustre_cfg* lcfg = buf;
         struct filter_obd *filter = &obd->u.filter;
+        struct lustre_cfg *lcfg = buf;
+        unsigned long page;
         int rc;
         ENTRY;
 
         spin_lock_init(&filter->fo_denylist_lock);
         INIT_LIST_HEAD(&filter->fo_denylist);
 
+        /* 2.6.9 selinux wants a full option page for do_kern_mount (bug6471) */
+        page = get_zeroed_page(GFP_KERNEL);
+        if (!page)
+                RETURN(-ENOMEM);
+
+        memcpy((void *)page, lustre_cfg_buf(lcfg, 4),
+               LUSTRE_CFG_BUFLEN(lcfg, 4));
+        
         /* all mount options including errors=remount-ro and asyncdel are passed
          * using 4th lcfg param. And it is good, finally we have got rid of
          * hardcoded fs types in the code. */
-        rc = filter_common_setup(obd, len, buf, lustre_cfg_buf(lcfg, 4));
+        rc = filter_common_setup(obd, len, buf, (void *)page);
+        free_page(page);
+        
         if (rc)
                 RETURN(rc);
         rc = filter_post_fs_setup(obd);
index 500ff07..b539f3f 100644 (file)
@@ -79,7 +79,11 @@ static int filter_lvbo_init(struct ldlm_resource *res)
         if (dentry->d_inode == NULL) {
                 lvb->lvb_size = 0;
                 lvb->lvb_blocks = 0;
-                lvb->lvb_mtime = LTIME_S(CURRENT_TIME);
+
+                /* making client use MDS mtime as this one is zero, bigger one
+                 * will be taken and this does not break POSIX. Thanks to
+                 * Andreas. --umka */
+                lvb->lvb_mtime = 0;
         } else {
                 lvb->lvb_size = dentry->d_inode->i_size;
                 lvb->lvb_blocks = dentry->d_inode->i_blocks;
index ed4da89..c504e01 100644 (file)
 /* sanobd setup methods - use a specific mount option */
 int filter_san_setup(struct obd_device *obd, obd_count len, void *buf)
 {
-        struct lustre_cfg* lcfg = buf;
-        char *option = NULL;
-
-        if (!lustre_cfg_buf(lcfg, 2))
+        struct lustre_cfg *lcfg = buf;
+        unsigned long page;
+        int rc;
+        
+        if (lcfg->lcfg_bufcount < 3 || LUSTRE_CFG_BUFLEN(lcfg, 2) < 1)
                 RETURN(-EINVAL);
 
+        /* 2.6.9 selinux wants a full option page for do_kern_mount (bug6471) */
+        page = get_zeroed_page(GFP_KERNEL);
+        if (!page)
+                RETURN(-ENOMEM);
+
         /* for extN/ext3 filesystem, we must mount it with 'writeback' mode */
-        if (!strcmp(lustre_cfg_string(lcfg, 2), "extN"))
-                option = "data=writeback";
+        if (!strcmp(lustre_cfg_string(lcfg, 2), "ldiskfs"))
+                strcpy((void *)page, "data=writeback");
         else if (!strcmp(lustre_cfg_string(lcfg, 2), "ext3"))
-                option = "data=writeback,asyncdel";
+                strcpy((void *)page, "data=writeback,asyncdel");
         else
                 LBUG(); /* just a reminder */
 
-        return filter_common_setup(obd, len, buf, option);
+        rc = filter_common_setup(obd, len, buf, (void *)page);
+        free_page(page);
+        
+        return rc;
 }
 
 int filter_san_preprw(int cmd, struct obd_export *exp, struct obdo *oa,