}
EXPORT_SYMBOL(simple_mkdir);
+/* utility to rename a file */
+int lustre_rename(struct dentry *dir, char *oldname, char *newname)
+{
+ struct dentry *dchild_old, *dchild_new;
+ int err = 0;
+ ENTRY;
+
+ ASSERT_KERNEL_CTXT("kernel doing rename outside kernel context\n");
+ CDEBUG(D_INODE, "renaming file %.*s to %.*s\n",
+ (int)strlen(oldname), oldname, (int)strlen(newname), newname);
+
+ dchild_old = ll_lookup_one_len(oldname, dir, strlen(oldname));
+ if (IS_ERR(dchild_old))
+ RETURN(PTR_ERR(dchild_old));
+
+ if (!dchild_old->d_inode)
+ GOTO(put_old, err = -ENOENT);
+
+ dchild_new = ll_lookup_one_len(newname, dir, strlen(newname));
+ if (IS_ERR(dchild_new))
+ GOTO(put_old, err = PTR_ERR(dchild_new));
+
+ err = vfs_rename(dir->d_inode, dchild_old, dir->d_inode, dchild_new);
+
+ dput(dchild_new);
+put_old:
+ dput(dchild_old);
+ RETURN(err);
+}
+EXPORT_SYMBOL(lustre_rename);
+
/*
* Read a file from within kernel context. Prior to calling this
* function we should already have done a push_ctxt().
EXPORT_SYMBOL(obd_memmax);
#ifdef LUSTRE_KERNEL_VERSION
-
#ifndef HAVE_CLEAR_RDONLY_ON_PUT
-#error rdonly patchset must be updated
+#error rdonly patchset must be updated [cfs bz11248]
#endif
void dev_set_rdonly(lvfs_sbdev_type dev);
-void dev_clear_rdonly(lvfs_sbdev_type dev);
int dev_check_rdonly(lvfs_sbdev_type dev);
-void lvfs_set_rdonly(lvfs_sbdev_type dev)
+void __lvfs_set_rdonly(lvfs_sbdev_type dev, lvfs_sbdev_type jdev)
{
- CDEBUG(D_IOCTL | D_HA, "set dev %lx rdonly\n", (long)dev);
lvfs_sbdev_sync(dev);
+ if (jdev && (jdev != dev)) {
+ CDEBUG(D_IOCTL | D_HA, "set journal dev %lx rdonly\n",
+ (long)jdev);
+ dev_set_rdonly(jdev);
+ }
+ CDEBUG(D_IOCTL | D_HA, "set dev %lx rdonly\n", (long)dev);
dev_set_rdonly(dev);
}
return dev_check_rdonly(dev);
}
-void lvfs_clear_rdonly(lvfs_sbdev_type dev)
-{
- CDEBUG(D_IOCTL | D_HA, "(will unset dev %lx rdonly on put)\n",
- (long)dev);
-}
-
-EXPORT_SYMBOL(lvfs_set_rdonly);
+EXPORT_SYMBOL(__lvfs_set_rdonly);
EXPORT_SYMBOL(lvfs_check_rdonly);
-EXPORT_SYMBOL(lvfs_clear_rdonly);
-#endif
+#endif /* LUSTRE_KERNEL_VERSION */
int lvfs_check_io_health(struct obd_device *obd, struct file *file)
{