* version 1.8.1
* Support for kernels:
2.6.16.60-0.37 (SLES 10),
- 2.6.27.23-0.1 (SLES11),
+ 2.6.27.23-0.1 (SLES11, i686 & x84_64 only),
2.6.18-128.1.14.el5 (RHEL 5),
* Client support for unpatched kernels:
(see http://wiki.lustre.org/index.php?title=Patchless_Client)
* NFS export disabled when stack size < 8192. Since the NFSv4 export
of Lustre filesystem with 4K stack may cause a stack overflow. For
more information, please refer to bugzilla 17630.
+ * ext4 support for RHEL5 is experimental and thus should not be
+ used in production.
Severity : normal
Frequency : with 1.8 server and 1.6 clients
Bugzilla : 20020
-Descriptoin: correctly shrink reply for avoid send too big message to client.
+Description: correctly shrink reply for avoid send too big message to client.
Details : 1.8 mds is allocate to big buffer to LOV EA data and this produce
- some problems with sending this reply to 1.6 client.
+ some problems with sending this reply to 1.6 client.
Severity : normal
Bugzilla : 19917
For local clients the use of GFP_NOFS will be introduced in 1.8.2
Severity : enhancement
-Bugzilla : 19846
+Bugzilla : 19846, 18289
Description: Update kernel to RHEL5 2.6.18-128.1.14.el5.
Severity : enhancement
Description: Add support for SLES11 2.6.27.23-0.1.
Severity : enhancement
-Bugzilla : 18289
-Description: Update to RHEL5U3 kernel-2.6.18-128.1.1.el5.
-
-Severity : enhancement
Bugzilla : 14250
Description: Update client support to vanila kernels up to 2.6.27.
Details : An NFS client cannot access the Lustre filesystem NFS-mounted
from a Lustre-client exporting the Lustre filesystem via NFS.
+Severity : normal
+Bugzilla : 20139
+Description: panic in ll_statahead_thread
+Details : grab dentry reference in parent process.
+
-------------------------------------------------------------------------------
tbd Sun Microsystems, Inc.
return rc;
}
-struct ll_sa_thread_args {
- struct dentry *sta_parent;
- pid_t sta_pid;
-};
-
static int ll_statahead_thread(void *arg)
{
- struct ll_sa_thread_args *sta = arg;
- struct dentry *parent = dget(sta->sta_parent);
+ struct dentry *parent = (struct dentry *)arg;
struct inode *dir = parent->d_inode;
struct ll_inode_info *lli = ll_i2info(dir);
struct ll_sb_info *sbi = ll_i2sbi(dir);
spin_lock(&lli->lli_lock);
if (unlikely(lli->lli_sai == NULL)) {
spin_unlock(&lli->lli_lock);
+ CERROR("ll_statahead_info is NULL, parent maybe exit abnormally, "
+ "dentry@%p %.*s, inode = %lu, pid = %u\n",
+ parent, parent->d_name.len, parent->d_name.name,
+ dir->i_ino, lli->lli_opendir_pid);
+ /* At this point, ll_statahead_info is NULL, and parent maybe
+ * exit abnormally, I can not notify parent even it is alive
+ * yet. Just put the reference count on parent dentry. */
+ lli->lli_opendir_key = NULL;
+ lli->lli_opendir_pid = 0;
dput(parent);
RETURN(-EAGAIN);
} else {
{
char pname[16];
- snprintf(pname, 15, "ll_sa_%u", sta->sta_pid);
+ snprintf(pname, 15, "ll_sa_%u", lli->lli_opendir_pid);
cfs_daemonize(pname);
}
struct ll_sb_info *sbi = ll_i2sbi(dir);
struct ll_inode_info *lli = ll_i2info(dir);
struct ll_statahead_info *sai = lli->lli_sai;
- struct ll_sa_thread_args sta;
struct l_wait_info lwi = LWI_INTR(LWI_ON_SIGNAL_NOOP, NULL);
int rc = 0;
ENTRY;
LASSERT(sai->sai_inode == (*dentryp)->d_parent->d_inode);
- sta.sta_parent = (*dentryp)->d_parent;
- sta.sta_pid = cfs_curproc_pid();
-
lli->lli_sai = sai;
- rc = cfs_kernel_thread(ll_statahead_thread, &sta, 0);
+ /* get parent reference count here, and put it in ll_statahead_thread */
+ rc = cfs_kernel_thread(ll_statahead_thread, dget((*dentryp)->d_parent), 0);
if (rc < 0) {
CERROR("can't start ll_sa thread, rc: %d\n", rc);
lli->lli_opendir_key = NULL;
sai->sai_thread.t_flags = SVC_STOPPED;
ll_sai_put(sai);
LASSERT(lli->lli_sai == NULL);
+ dput((*dentryp)->d_parent);
RETURN(-EAGAIN);
}